使用 xlsxwriter 仅使用数据格式化 headers
Formatting only headers with data using xlsxwriter
我在使用 worksheet.set_row()
仅应用于包含数据的列时遇到了一些格式问题。就目前而言,当我打开工作簿时,格式会应用于整个 header 行,甚至超过数据停止的位置,这看起来有点草率,见下文:
如您所见,格式继续到 AL、AM、AN、AO 等列...由于这些列(或 headers 中没有数据)看起来有点草率。
我之前使用以下方法对工作簿中的每个 sheet 应用格式:
header = workbook.add_format({'bold': True, 'bottom': 2, 'bg_color': '#F9DA04'})
worksheet.set_row(0, None, header)
我理解这是因为 worksheet.set_row()
使用了行索引。我找不到关于这个范围的任何文档,我可以以某种方式指定 A1:AK1
或类似的东西吗?如果重要的话,每个作品 sheet 都是使用 Pandas 的多个数据帧 pd.concat()
的结果。
As you can see, the formatting continues onto columns AL, AM, AN, AO, etc..
这就是行格式在 Excel 中的工作方式。如果将它应用于一行,那么所有单元格都会被格式化。
could I somehow specify A1:AK1 or something like that?
如果您只想格式化某些单元格,那么最好只将格式应用于这些单元格。例如:
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()
输出:
If it matters, each worksheet is the result of a pd.concat() of multiple dataframes using Pandas.
有关如何从数据帧格式化 header 的示例,请参阅 XlsxWriter docs:
中的示例
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()
输出:
我在使用 worksheet.set_row()
仅应用于包含数据的列时遇到了一些格式问题。就目前而言,当我打开工作簿时,格式会应用于整个 header 行,甚至超过数据停止的位置,这看起来有点草率,见下文:
如您所见,格式继续到 AL、AM、AN、AO 等列...由于这些列(或 headers 中没有数据)看起来有点草率。
我之前使用以下方法对工作簿中的每个 sheet 应用格式:
header = workbook.add_format({'bold': True, 'bottom': 2, 'bg_color': '#F9DA04'})
worksheet.set_row(0, None, header)
我理解这是因为 worksheet.set_row()
使用了行索引。我找不到关于这个范围的任何文档,我可以以某种方式指定 A1:AK1
或类似的东西吗?如果重要的话,每个作品 sheet 都是使用 Pandas 的多个数据帧 pd.concat()
的结果。
As you can see, the formatting continues onto columns AL, AM, AN, AO, etc..
这就是行格式在 Excel 中的工作方式。如果将它应用于一行,那么所有单元格都会被格式化。
could I somehow specify A1:AK1 or something like that?
如果您只想格式化某些单元格,那么最好只将格式应用于这些单元格。例如:
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()
输出:
If it matters, each worksheet is the result of a pd.concat() of multiple dataframes using Pandas.
有关如何从数据帧格式化 header 的示例,请参阅 XlsxWriter docs:
中的示例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()
输出: