python - Xlsxwriter - 使用 xlsxwriter 格式化 Pandas 数据框单元格时遇到问题

标签 python excel pandas xlsxwriter

我有一个来自 Pandas 数据框的 Excel 工作表。然后我使用 Xlsxwriter 添加公式、新列和格式。问题是我似乎只能格式化我使用 xlsxwriter 编写的内容,而不能格式化来自数据框的内容。所以我得到的是这样的 half formatted table

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

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

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 用于编写 header 时,它使用自己的格式样式覆盖底层 xlsxwriter 版本。最简单的方法是阻止它写入 header 并让它写入从 1 行开始的其余数据(而不是 0)。这避免了格式被更改。然后,您可以使用数据框中的列值轻松编写自己的标题。

关于python - Xlsxwriter - 使用 xlsxwriter 格式化 Pandas 数据框单元格时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39919548/

相关文章:

python - 是否可以在 scikit learn 中使用复数作为目标标签?

python - 单击由 JavaScript 使用 Python Webdriver 编写的数据绑定(bind)下的按钮

vba - 通过 FileSystemObject 迭代文件夹中的文件

python - pandas:计算表行之间的相关性

python - NetworkX - 保持边缘秩序

python - 单词不以数字开头

excel - 如何计算 Microsoft Excel 中的目标年数

java - 如何在每次运行时将从 Excel 文件读取的数据保存到新类中

Python pandas 创建不均匀的多索引

python - 使用字典作为映射器创建 pandas 系列