Python需要将巨大的excel分解成小的excel。编码不工作

2024-10-06 12:39:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的excel,我需要把它分成几个小的部分(我正在使用python)。它应该把大excel的每300行写进小excel的前300行(每个小excel应该有300行或更少,最后一行)。大的excel只是一个excel,元素位于第一列(A:A),大约8000行(单元格包含电子邮件)。你知道吗

代码如下:

from xlrd import open_workbook
import xlsxwriter


wb = open_workbook('BBDD_POLAROID_TOTAL.xlsx')
excel_num = 0
print('ARCHIVO: ' + str(excel_num))
workbook = xlsxwriter.Workbook('BBDD' + str(excel_num) + '.xlsx')
worksheet = workbook.add_worksheet()
for s in wb.sheets():
    number_of_rows = s.nrows
    for row in range(number_of_rows):
        if row % 300 == 0:
            print('close: ' + str(excel_num))
            workbook.close()
            excel_num += 1
            print('ARCHIVO: ' + str(excel_num))
            workbook = xlsxwriter.Workbook('BBDD' + str(excel_num) + '.xlsx')
            worksheet = workbook.add_worksheet()
            print('all good: ' + str(excel_num))
        print(str(row) + s.cell(row, 0).value)
        worksheet.write(row, 0, s.cell(row, 0).value)

我不明白为什么这个代码不起作用。它实际上包装了所有的优秀作品,但只写在第二个(第一个只是打开和关闭)。你知道吗

谢谢你的帮助!你知道吗


Tags: 代码importopenxlsxexcelnumrowworkbook
2条回答

出于我在评论中提到的原因,这里有一个可能的解决方法:

from xlrd import open_workbook
import xlsxwriter


wb = open_workbook('BBDD_POLAROID_TOTAL.xlsx')
excel_num = 0
print('ARCHIVO: ' + str(excel_num))
workbook = xlsxwriter.Workbook('BBDD' + str(excel_num) + '.xlsx')
worksheet = workbook.add_worksheet()

for s in wb.sheets():
    number_of_rows = s.nrows
    for row in range(0, number_of_rows):
        if row % 300 == 0:
            if row == 0:
                print(str(row) + s.cell(row, 0).value)
                worksheet.write(row%300, 0, s.cell(row, 0).value)
            else:
                print('close: ' + str(excel_num))
                workbook.close()
                excel_num += 1
                print('ARCHIVO: ' + str(excel_num))
                workbook = xlsxwriter.Workbook('BBDD' + str(excel_num) + '.xlsx')
                worksheet = workbook.add_worksheet()
                print('all good: ' + str(excel_num))
        print(str(row) + ' ' + s.cell(row, 0).value)
        worksheet.write(row%300, 0, s.cell(row, 0).value)
workbook.close()

这个代码就是我想要的。但我还是不明白为什么其他代码是错的。如果有人知道答案,我会很高兴的。你知道吗

PD:打印只是为了看看文件是怎么写的。你知道吗

from xlrd import open_workbook
import xlsxwriter


wb = open_workbook('BBDD_POLAROID_TOTAL.xlsx')
archivo = [[]]
excel_num = 0

for s in wb.sheets():
    number_of_rows = s.nrows
    for row in range(number_of_rows):
        print(str(excel_num) + ' ' + str(row) + ' ' + s.cell(row, 0).value)
        archivo[excel_num].append(s.cell(row, 0).value)
        if row % 300 == 0 and row != 0:
            archivo.append([])
            excel_num += 1

for name in range(len(archivo)):
    workbook = xlsxwriter.Workbook('BBDD' + str(name) + '.xlsx')
    worksheet = workbook.add_worksheet()
    for mail_index in range(len(archivo[name])):
        print(str(name) + ' ' + str(mail_index) + ' ' + archivo[name][mail_index])
        worksheet.write(mail_index, 0, archivo[name][mail_index])
    workbook.close()

相关问题 更多 >