Python Xlsxwriter-使用Xlsxwriter格式化数据帧单元格时出现问题

Python Xlsxwriter-使用Xlsxwriter格式化数据帧单元格时出现问题,python,excel,pandas,xlsxwriter,Python,Excel,Pandas,Xlsxwriter,我有一张来自熊猫数据框的excel表格。然后我使用Xlsxwriter添加公式、新列和格式。问题是,我似乎只能格式化我使用xlsxwriter编写的内容,而不能格式化来自数据帧的内容。所以我得到的是这样的东西 从图像中可以看到,数据帧中的两列保持不变。它们必须具有某种覆盖我的默认格式 由于我不知道如何将工作表转换回数据帧,下面的代码显然是完全错误的,但这只是为了让我了解我在寻找什么 export = "files/sharepointExtract.xlsx" df = pd.read_exce

我有一张来自熊猫数据框的excel表格。然后我使用Xlsxwriter添加公式、新列和格式。问题是,我似乎只能格式化我使用xlsxwriter编写的内容,而不能格式化来自数据帧的内容。所以我得到的是这样的东西


从图像中可以看到,数据帧中的两列保持不变。它们必须具有某种覆盖我的默认格式

由于我不知道如何将工作表转换回数据帧,下面的代码显然是完全错误的,但这只是为了让我了解我在寻找什么

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循环,我们也只能得到图像中可以看到的内容。

以下应该可以工作:

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 background with white text
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')

# Set the header (row 0) to height 15 using colour_format
worksheet.set_row(0, 15, colour_format)
# Set the default format for other rows
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
)。这样可以避免更改格式。然后,您可以使用数据框中的列值轻松地编写自己的标题。

您是否也可以包括编写数据的代码部分,以便我们可以看到它与样式的关系?“它们必须具有某种覆盖我的默认格式。”这是正确的。熊猫中有默认的列/标题格式,可以覆盖通过XlsxWriter接口应用的行/列格式。据我所知,没有任何公共api可以更改格式(除了
datetime\u格式
date\u格式
)。@ASGM更新了代码以包括我在哪里编写数据伟大-你也可以发布错误吗?我看到你建议使用set\u行和set\u列来添加格式。set_column是否覆盖set_row命令的格式?
set_column()
用于提供默认格式。用于标题的
set_row()
覆盖默认值。希望这有帮助。