我有一个脚本,它按顺序创建了以下几对工作表:
WorkSheet (holds data) -> ChartSheet using WorkSheet
脚本完成后,我留下了如此订购的工作表:
Data1, Chart1, Data2, Chart2, Data3, Chart3, ...
是否可以在脚本末尾(即workbook.close()
之前)重新排序工作表,以便在最终的.xlsx文件中获取以下工作表顺序?
Chart1, Chart2, Chart3,...,ChartN, Data1, Data2, Data3,...
答案 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()