我正在尝试使用 python 库 xlsxwriter 在 Excel 中添加数据表
我的数据框名为
whole
有 26 列(正是字母表中的字母),所以我尝试使用以下代码设置它们:
workbook = xlsxwriter.Workbook(f'workbook.xlsx', {"nan_inf_to_errors": True})
worksheet = workbook.add_worksheet("Column Setter")
worksheet.add_table(f"A1:{chr(ord('@')+len(whole.columns))}{len(whole)}", {'data':
whole.values.tolist(),
'banded_columns': True, 'banded_rows': False, 'header_row': True,
'columns': [{'header': col} for col in whole.columns.tolist()]})
worksheet.autofit()
但是输出似乎将所有列名称设置为 Column1 等。
这段代码似乎非常适合另一个具有 3 列的数据框,所以我很难理解为什么这不起作用。任何答案都会非常有帮助。
它应该按预期工作。这是一个基于您的示例数据框的示例:
import pandas as pd
import xlsxwriter
# Create a Pandas dataframe from some sample data.
data = {}
for num in range(1, 27):
data[f"Data {num}"] = [1, 2, 3, 4, 5]
whole = pd.DataFrame(data)
# Create a workbook and worksheet.
workbook = xlsxwriter.Workbook(f"workbook.xlsx", {"nan_inf_to_errors": True})
worksheet = workbook.add_worksheet("Column Setter")
# Get the dimensions of the dataframe.
(max_row, max_col) = whole.shape
# Add the Excel table structure.
worksheet.add_table(0, 0, max_row, max_col - 1,
{
"data": whole.values,
"banded_columns": True,
"banded_rows": False,
"header_row": True,
"columns": [{"header": col} for col in whole.columns],
},
)
worksheet.autofit()
workbook.close()
输出看起来像预期的那样:
我不知道这是否是您输出中的一个因素,但最好对表维度使用 (row, col) 语法,而不是尝试构造 A1 样式字符串。此外,示例中的
tolist()
方法调用不是必需的。