13

我有一个脚本,它按顺序创建以下几对工作表:

WorkSheet (holds data) -> ChartSheet using WorkSheet

脚本完成后,我留下的工作表按如下顺序排列:

Data1, Chart1, Data2, Chart2, Data3, Chart3, ...

是否可以在脚本末尾(即之前workbook.close())重新排序工作表以在最终的 .xlsx 文件中获得以下工作表顺序?

Chart1, Chart2, Chart3,...,ChartN, Data1, Data2, Data3,...
4

3 回答 3

19

只需排序workbook.worksheets_objs列表:

import xlsxwriter


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

sheet_names = ['Data1', 'Chart1', 'Data2', 'Chart2', 'Data3', 'Chart3']
for sheet_name in sheet_names:
    workbook.add_worksheet(sheet_name)

# sort sheets based on name
workbook.worksheets_objs.sort(key=lambda x: x.name)
workbook.close()
于 2014-01-14T17:05:02.067 回答
14

我是 XlsxWriter 的作者。可以这样做,但不建议这样做。

每个工作表都有一个内部索引,Excel 使用该索引来跟踪不同工作簿对象的关系。

对工作表进行排序可能在一些简单的情况下有效,但对于更复杂的工作簿,它可能会导致问题。

于 2014-01-14T21:10:35.627 回答
4

您可以按照您想要的顺序创建虚拟工作表,并以任何顺序用真实数据填充它们:

import pandas as pd
dummy = pd.DataFrame()
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
# Here go the dummy sheets in the order you want
dummy.to_excel(writer, sheet_name='Chart1')
dummy.to_excel(writer, sheet_name='Chart2')
dummy.to_excel(writer, sheet_name='Data1')
dummy.to_excel(writer, sheet_name='Data2')
# Then you fill-in the placeholders in whatever order:
data1.to_excel(writer, sheet_name='Data1')
chart1.to_excel(writer, sheet_name='Chart1')
data2.to_excel(writer, sheet_name='Data2')
chart2.to_excel(writer, sheet_name='Chart2')
writer.close()
于 2020-07-31T14:20:14.087 回答