Python: вывод на печать на нескольких листах Excel - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть 4 списка, каждый из которых имеет 33 значения, и я хочу напечатать комбинацию в Excel. Excel ограничивает количество строк на каждом листе 1 048 576 , а количество комбинаций превышает ограничение листа на 137 345 значений .

Как продолжить печать результата на следующем листе в той же книге?

a = [100, 101, 102,...,133]
b = [250, 251, 252,...,283]
c = [300, 301, 302,...,333]
d = [430, 431, 432,...,463]

list_combined = [(p,q,r,s)   for p in a 
                             for q in b 
                             for r in c 
                             for s in d]

import xlsxwriter

workbook = xlsxwriter.Workbook('combined.xlsx')

worksheet = workbook.add_worksheet()

for row, group in enumerate(list_combined):
    for col in range(5):
        worksheet.write (row, col, group[col])
workbook.close()

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете установить верхний предел и переключиться на новый лист, как только достигнете предела.

Вот пример с нижним пределом, который поддерживается Excel для тестирования:

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()

# Simulate a big list
biglist = range(1, 1001)

# Set max_row to your required limit. Zero indexed.
max_row = 100
row_num = 0

for data in biglist:

    # If we hit the upper limit then create and switch to a new worksheet
    # and reset the row counter.
    if row_num == max_row:
        worksheet = workbook.add_worksheet()
        row_num = 0

    worksheet.write(row_num, 0, data)
    row_num += 1

workbook.close()

Выход:

enter image description here

0 голосов
/ 03 сентября 2018

Во-первых, вызовы Python должны ставить круглые скобки сразу после имени. Пробелы не допускаются:

worksheet.write (row, col, group[col]) worksheet.write(row, col, group[col])

Во-вторых, чтобы записать в несколько листов, вам нужно сделать следующее: Пример взят из этого SO ответа

import xlsxwriter
list_name = ["first sheet", "second sheet", "third sheet"]

workbook = xlsxwriter.Workbook(<Your full path>)
for sheet_name in list_name:
    worksheet = workbook.add_worksheet(sheet_name)
    worksheet.write('A1', sheet_name)

workbook.close()

Если вы не хотите передавать какое-либо имя на лист, удалите аргумент sheet_name, и будет указано имя по умолчанию.

Чтобы разбить данные на листы, вы можете легко адаптировать код в:

for piece in iterable_data_set:
    # consider "piece" a piece of data you want to put into each sheet
    # `piece` must be an nxm matrix that contains dumpable data.
    worksheet = workbook.add_worksheet()
    for i in range(len(piece)):
        for j in range(len(piece[i])):
            worksheet.write(i, j, piece[i][j])

Рекомендую сначала поискать ответ на свой вопрос, чтобы избежать повторяющихся ответов . Если однажды их поиск не решит вашу проблему, вы можете спросить ее, а также рассказать, чем ваша проблема отличается от других, найденных в других вопросах.

...