可以在xlsxwriter中更改工作表顺序吗?

时间:2014-01-14 16:37:24

标签: python excel xlsxwriter

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

WorkSheet (holds data) -> ChartSheet using WorkSheet

脚本完成后,我留下了如此订购的工作表:

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

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

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

3 个答案:

答案 0 :(得分:14)

只需排序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()

答案 1 :(得分:8)

可以这样做,但不建议。

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

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

答案 2 :(得分:1)

您可以按照想要的顺序创建哑表,它们以任意顺序填充真实数据:

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()