使用 xlsxwriter 仅格式化带有数据的标题

AGH*_*ORN 2 python pandas xlsxwriter

worksheet.set_row()我在通过仅应用于包含数据的列来获取格式时遇到了一些麻烦。就目前情况而言,当我打开工作簿时,格式会应用于整个标题行,甚至超过数据停止的位置,这看起来有点草率,请参见下文:

在此输入图像描述

正如您所看到的,格式化继续到 AL、AM、AN、AO 等列...由于这些列(或与此相关的标题)中没有数据,因此看起来有点草率。

我之前使用以下命令将格式应用于工作簿中的每个工作表:

header = workbook.add_format({'bold': True, 'bottom': 2, 'bg_color': '#F9DA04'})
worksheet.set_row(0, None, header)
Run Code Online (Sandbox Code Playgroud)

我明白这是因为worksheet.set_row()使用行索引。我找不到任何关于这个范围的文档,我可以以某种方式指定A1:AK1或类似的东西吗?如果重要的话,每个工作表都是使用 Pandas 的多个数据帧的结果pd.concat()

jmc*_*ara 6

如您所见,格式化继续到 AL、AM、AN、AO 等列。

这就是 Excel 中行格式的工作原理。如果将其应用于一行,则所有单元格都会被格式化。

我可以以某种方式指定 A1:AK1 或类似的东西吗?

如果您只想设置某些单元格的格式,那么最好将格式仅应用于这些单元格。例如:

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()

header_data = ['EID', 'Notification', 'Test #']

header_format = workbook.add_format({'bold': True,
                                     'bottom': 2,
                                     'bg_color': '#F9DA04'})

for col_num, data in enumerate(header_data):
    worksheet.write(0, col_num, data, header_format)

workbook.close()
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

如果重要的话,每个工作表都是使用 Pandas 的多个数据帧的 pd.concat() 的结果。

有关如何格式化数据帧标头的示例,请参阅 XlsxWriter文档中的示例:

import pandas as pd

# Create a Pandas dataframe from the data.
df = pd.DataFrame({'Data1': [10, 20, 30, 20],
                   'Data2': [10, 20, 30, 20],
                   'Data3': [10, 20, 30, 20],
                   'Data4': [10, 20, 30, 20]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter')

# Turn off the default header and skip one row to allow us to insert a
# user defined header.
df.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False)

# Get the xlsxwriter workbook and worksheet objects.
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

# Add a header format.
header_format = workbook.add_format({'bold': True,
                                     'bottom': 2,
                                     'bg_color': '#F9DA04'})

# Write the column headers with the defined format.
for col_num, value in enumerate(df.columns.values):
    worksheet.write(0, col_num + 1, value, header_format)

# Close the Pandas Excel writer and output the Excel file.
writer.save()
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述