Xlsxwriter - используйте переменную в таблице, чтобы преуспеть - PullRequest
2 голосов
/ 30 апреля 2020

Я использую pandas concat для объединения нескольких фреймов данных (таблиц) в документ Excel. Я использую Xlsxwriter для вывода Excel.

Мой вопрос заключается в том, что в приведенном ниже коде я задаю диапазон для таблицы в excel, используя worksheet.add_table('A1:D26'). Это работает для этого файла примера. Но в итоговом документе количество фреймов зависит от входных данных. Так что иногда это df1 до df5. Достаточно 26 строк. Но это также может быть меньше, может быть 1 или 2 кадра данных или намного больше. Могу ли я использовать переменную вместо D26?

Например, worksheet.add_table('A1:Dx'), где x определяется входом пользователя?

Заранее спасибо!

import pandas as pd
import xlsxwriter

df1 = pd.DataFrame({'0':['X','1','2','3'],
                    '1':['1','☐','☐','☐'],
                    '2':['2','☐','☐','☐'],
                    '3':['3','☐','☐','☐'],
                    '4':['','','','']})

df2 = pd.DataFrame({'0':['X','1','2','3'],
                    '1':['1','☐','☐','☐'],
                    '2':['2','☐','☐','☐'],
                    '3':['3','☐','☐','☐'],
                    '4':['','','','']})

df3 = pd.DataFrame({'0':['X','1','2','3'],
                    '1':['1','☐','☐','☐'],
                    '2':['2','☐','☐','☐'],
                    '3':['3','☐','☐','☐'],
                    '4':['','','','']})

df4 = pd.DataFrame({'0':['X','1','2','3'],
                    '1':['1','☐','☐','☐'],
                    '2':['2','☐','☐','☐'],
                    '3':['3','☐','☐','☐'],
                    '4':['','','','']})

df5 = pd.DataFrame({'0':['X','1','2','3'],
                    '1':['1','☐','☐','☐'],
                    '2':['2','☐','☐','☐'],
                    '3':['3','☐','☐','☐'],
                    '4':['','','','']})

result = pd.concat([df1, df2, df3, df4, df5], axis=1)

workbook = xlsxwriter.Workbook('example.xlsx')
worksheet = workbook.add_worksheet('output')
worksheet.add_table('A1:D26', {'data': result.values.T.tolist(),'style': 'None', 'header_row': False})

workbook.close()

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы можете попробовать форматировать строку. Здесь я определяю x1 и x2, затем вставляю их в строку диапазона ячеек, используя %d для указания целочисленного формата. За строкой следует % (<arg1>,<arg2>).

x1 = 2
x2 = 27
worksheet.add_table('A%d:D%d'%(x1,x2), {'data': result.values.T.tolist(),'style': 'None', 'header_row': False})
0 голосов
/ 30 апреля 2020

Например, worksheet.add_table('A1:Dx'), где x определяется userinput?

Почти во всех случаях методы XlsxWriter поддерживают две формы записи для обозначения положения ячеек: Row-column обозначение и обозначение A1.

В add_table() поддерживаются как строка-столбец, так и нотация в стиле A1. Следующие значения эквивалентны:

worksheet.add_table(2, 1, 6, 5, { ... })
worksheet.add_table('B3:F7',    { ... })

Так что для вашего случая вы можете использовать:

worksheet.add_table(0, 0, row_num, 4, { ... })  # A1:Dx

Где row_num - это нулевое индексированное число, основанное на длине вашего кадра данных или некоторого другого входная переменная.

...