簡體   English   中英

Xlsxwriter - 使用 xlsxwriter 格式化熊貓數據幀單元格時遇到問題

[英]Xlsxwriter - Trouble formatting pandas dataframe cells using xlsxwriter

我有一個來自熊貓數據框的 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 )開始寫入其余數據。 這避免了格式被更改。 然后,您可以使用數據框中的列值輕松編寫自己的標題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM