我有一张来自熊猫数据框的excel表。然后我使用Xlsxwriter添加公式,新列和格式。问题是我似乎只能格式化我使用xlsxwriter编写的内容以及来自数据帧的任何内容。所以我得到的是这样的half formatted table
从图像中可以看出,数据框中的两列保持不变。他们必须有某种覆盖我的默认格式。
由于我不知道如何将工作表转换回数据框,因此下面的代码显然是完全错误的,但这只是为了了解我正在寻找的内容。< / p>
export = "files/sharepointExtract.xlsx"
df = pd.read_excel(export)# df = dataframe
writer = pd.ExcelWriter('files/new_report-%s.xlsx' % (date.today()), engine = 'xlsxwriter')
workbook = writer.book
# Code to make the header red, this works fine because
# it's written in xlsxwriter using write.row()
colour_format = workbook.add_format()
colour_format.set_bg_color('#640000')
colour_format.set_font_color('white')
worksheet.set_row(0, 15, colour_format)
table_body_format = workbook.add_format()
table_body_format.set_bg_color('blue')
for row in worksheet.rows:
row.set_row(0,15, table_body_format)
此代码给出了一个属性错误,但即使没有for循环,我们也只能得到图像中可以看到的内容。
答案 0 :(得分:1)
以下内容应该有效:
import pandas as pd
from datetime import date
export = "files/sharepointExtract.xlsx"
df = pd.read_excel(export)
writer = pd.ExcelWriter('files/new_report-{}.xlsx'.format(date.today()), engine ='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', startrow=1 , startcol=0, header=False, index=False, encoding='utf8')
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Code to make the header red
colour_format = workbook.add_format()
colour_format.set_bg_color('#640000')
colour_format.set_font_color('white')
# Code to make the body blue
table_body_format = workbook.add_format()
table_body_format.set_bg_color('blue')
worksheet.set_row(0, 15, colour_format)
worksheet.set_column('A:Z', 15, table_body_format)
# Write the header manually
for colx, value in enumerate(df.columns.values):
worksheet.write(0, colx, value)
writer.save()
当Pandas用于编写标头时,它使用自己的格式样式来覆盖底层的xlsxwriter版本。最简单的方法是阻止它编写标题并让它从行1
开始写入其余数据(而不是0
)。这可以避免格式化被改变。然后,您可以使用数据框中的列值轻松编写自己的标题。