在pandas和pandaslocking之外的Xlsxwriter
我正在使用xlsxwriter引擎将某些数据框与pandas.to_excel()一起推送到Excel表格中,但是我需要在每个表格上方标题。
以下是我希望达到的结果的一个例子:
我没有看到任何方式使用pandas的ExcelWriter对象来简单地操作每个单元格的内容,当我尝试这样做时,我得到:
例外:已忽略大小写的“样本”,已被使用。
我猜xlsxwriter自己locking它。 这里是一个例子:
xlsx_writer = pd.ExcelWriter( get_target_filepath(xlsx_name), engine='xlsxwriter' ) workbook = xlsx_writer.book worksheet = workbook.add_worksheet(sheet_name) worksheet.write(1, 1, 'ABC') _, sample_table = dataframe_tuples[0] sample_table.to_excel(xlsx_writer, startrow=3, startcol=2, sheet_name=sheet_name)
我可以使用openpyxl保存dataframe并重新进行处理,但是我严重的不喜欢格式化的方式,接下来我要做的是,如果我使用xlsxwriter格式化,然后用openpyxl重新打开它,它不能正确地保存格式,openpyxl毁了它。
我不能把excel本身放到服务器上来使用VBAmacros进行样式devise。
有没有办法解决这个问题,或者我只是在做一些可怕的错误?
您可以通过从pandas获取工作表引用并调用标准的XlsxWriter方法来完成。 喜欢这个:
import pandas as pd # Create some Pandas dataframes from some data. df1 = pd.DataFrame({'Data': [11, 12, 13, 14]}) df2 = pd.DataFrame({'Data': [21, 22, 23, 24]}) # Create a Pandas Excel writer using XlsxWriter as the engine. writer = pd.ExcelWriter('pandas_example.xlsx', engine='xlsxwriter') # Position the dataframes in the worksheet. df1.to_excel(writer, sheet_name='Sheet1', index=False, startrow=2) df2.to_excel(writer, sheet_name='Sheet1', index=False, startrow=9) # Get the worksheet object. worksheet = writer.sheets['Sheet1'] # Write some titles above the dataframes. worksheet.write(1, 0, 'Some random title 1') worksheet.write(8, 0, 'Some random title 2') # Close the Pandas Excel writer and output the Excel file. writer.save()
另请参阅使用Python Pandas和XlsxWriter 。
输出:
尝试使用多级别列:
In [137]: df Out[137]: ABC 0 1 2 3 1 4 5 6 2 7 8 9 In [138]: df.columns = pd.MultiIndex.from_product([['Caption'], df.columns]) In [139]: df Out[139]: Caption ABC 0 1 2 3 1 4 5 6 2 7 8 9 In [140]: df.to_excel('c:/temp/a.xlsx')
结果: