Xlsxwriter - 在 table 到 excel 中使用变量

Xlsxwriter - use variable in table to excel

我正在使用 pandas concat 将多个数据帧 (tables) 合并到一个 excel 文档中。 我将 Xlsxwriter 用于 excel 输出。

我的问题是,在下面的代码中,我使用 worksheet.add_table('A1:D26') 在 excel 中指定了 table 的范围。这适用于此示例文件。但在最终文档中,数据帧的数量取决于输入。所以有时它是 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()

您可以试试格式化字符串。我在这里定义 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})

For example worksheet.add_table('A1:Dx'), where x is defined by the userinput?

在几乎所有情况下,XlsxWriter 方法都支持两种形式的符号来指定单元格的位置:行列符号和 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 是一个基于数据帧长度或其他输入变量的零索引数。