xlsxwriter能否修改第一行及日期单元格的字体
目前遇到的情况是:某个excel中有连续两列,名字为:Job_Start_Date和Job_End_Date,我读取后另存新表,代码如下,但无法设置表格第一行以及日期格式的字体,但日期列的列宽是可以成功设置的。想知道问题在哪里:
writer = pd.ExcelWriter('Detail for ' + key + '.xlsx', engine='xlsxwriter', date_format='yyyy-mm-dd', datetime_format='yyyy-mm-dd')
detail_filtered.to_excel(writer, sheet_name='Detail', index=False, freeze_panes=(1,5))
workbook = writer.book
font_format = workbook.add_format({'font_name': '微软雅黑', 'font_size': 10})
date_format=workbook.add_format({'num_format': 'yyyy-mm-dd','font_name': '微软雅黑', 'font_size': 10})
worksheet = writer.sheets['Detail']
worksheet.set_row(0,16,font_format)
worksheet.set_column(detail_filtered.columns.get_loc('Job_Start_Date'),detail_filtered.columns.get_loc('Job_End_Date')+1,16,date_format) 可以使用以下代码来设置表格第一行和日期格式的字体:
writer = pd.ExcelWriter('Detail for ' + key + '.xlsx', engine='xlsxwriter', date_format='yyyy-mm-dd', datetime_format='yyyy-mm-dd')
detail_filtered.to_excel(writer, sheet_name='Detail', index=False, freeze_panes=(1,5))
workbook = writer.book
font_format = workbook.add_format({'font_name': '微软雅黑', 'font_size': 10})
date_format = workbook.add_format({'num_format': 'yyyy-mm-dd', 'font_name': '微软雅黑', 'font_size': 10})
worksheet = writer.sheets['Detail']
worksheet.set_row(0, None, font_format) # 将第一行的行高设为 None,表示自适应高度
worksheet.set_column(detail_filtered.columns.get_loc('Job_Start_Date'), detail_filtered.columns.get_loc('Job_End_Date'), None, date_format) # 将日期列的列宽设置为 None,表示自适应宽度
解释:使用 set_row() 方法设置第一行的字体格式,将行高设为 None,表示自适应高度。使用 set_column() 方法设置日期列的字体格式,将列宽设为 None,表示自适应宽度。 问题分析:
根据您提供的代码,您已经通过 xlsxwriter 库创建并写入了一个 Excel 文件。您希望设置第一行和日期单元格的字体,但是不生效。
原因分析:
xlsxwriter 库中,可以使用 set_row() 和 set_column() 方法分别设置某一行或某一列的格式。而日期格式的设置需要在 datetime_format 参数中指定相应的格式字符串。在您的代码中,似乎已经正确调用了 set_row() 和 set_column() 方法,但是在设置字体时出现了问题。此外,也没有指定 datetime_format 参数。
解决方案:
为了设置某一行或某一列的字体,您需要创建一个 Format 对象,并将其用于 set_row() 或 set_column() 方法中。您可以使用 add_format() 方法创建自定义格式。在您的代码中,似乎您已经正确创建了 font_format 和 date_format 两个格式,但是没有将它们应用到工作表中。
要将字体格式应用到第一行,请按照以下方式修改您的代码:
worksheet.set_row(0, None, font_format)
这会将第一行的行高设置为默认大小(None),并将 font_format 应用于该行。请注意,您还可以使用 set_default_row() 方法设置整个工作表的默认行高和格式。
要将日期格式应用于 Job_Start_Date 和 Job_End_Date 列,请按照以下方式修改您的代码:
worksheet.set_column(
detail_filtered.columns.get_loc('Job_Start_Date'),
detail_filtered.columns.get_loc('Job_End_Date'),
None,
date_format
)
这会将 Job_Start_Date 和 Job_End_Date 列中所有单元格的列宽设置为默认大小(None),并将 date_format 应用于该列。请注意,您还可以使用 set_default_column() 方法设置整个工作表的默认列宽和格式。此外,当您调用 set_column() 方法时,如果未指定列宽,则会将其设置为 8.43 字符宽度。如果不希望设置固定的列宽,您可以将列宽参数设置为 None。
最后,请确保在创建 ExcelWriter 对象时指定 datetime_format 参数,以便将日期格式应用于整个工作表:
writer = pd.ExcelWriter(
'Detail for ' + key + '.xlsx',
engine='xlsxwriter',
date_format='yyyy-mm-dd',
datetime_format='yyyy-mm-dd'
)
此参数是必需的,因为它指示 xlsxwriter 库将日期数据编写为日期单元格格式。
综上所述,以下是修改后的完整代码:
writer = pd.ExcelWriter(
'Detail for ' + key + '.xlsx',
engine='xlsxwriter',
date_format='yyyy-mm-dd',
datetime_format='yyyy-mm-dd'
)
detail_filtered.to_excel(writer, sheet_name='Detail', index=False, freeze_panes=(1, 5))
workbook = writer.book
font_format = workbook.add_format({'font_name': '微软雅黑', 'font_size': 10})
date_format = workbook.add_format({
'num_format': 'yyyy-mm-dd',
'font_name': '微软雅黑',
'font_size': 10
})
worksheet = writer.sheets['Detail']
worksheet.set_row(0, None, font_format)
worksheet.set_column(
detail_filtered.columns.get_loc('Job_Start_Date'),
detail_filtered.columns.get_loc('Job_End_Date'),
None,
date_format
)
writer.save()
希望这可以解决您的问题。如果您还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]