鱼C论坛

 找回密码
 立即注册
查看: 2809|回复: 2

xlsxwriter能否修改第一行及日期单元格的字体

[复制链接]
发表于 2023-10-9 12:39:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目前遇到的情况是:某个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)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-9 12:39:48 | 显示全部楼层
可以使用以下代码来设置表格第一行和日期格式的字体:

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,表示自适应宽度。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-9 12:40:37 | 显示全部楼层
问题分析:

根据您提供的代码,您已经通过 xlsxwriter 库创建并写入了一个 Excel 文件。您希望设置第一行和日期单元格的字体,但是不生效。

原因分析:

xlsxwriter 库中,可以使用 set_row()set_column() 方法分别设置某一行或某一列的格式。而日期格式的设置需要在 datetime_format 参数中指定相应的格式字符串。在您的代码中,似乎已经正确调用了 set_row()set_column() 方法,但是在设置字体时出现了问题。此外,也没有指定 datetime_format 参数。

解决方案:

为了设置某一行或某一列的字体,您需要创建一个 Format 对象,并将其用于 set_row()set_column() 方法中。您可以使用 add_format() 方法创建自定义格式。在您的代码中,似乎您已经正确创建了 font_formatdate_format 两个格式,但是没有将它们应用到工作表中。

要将字体格式应用到第一行,请按照以下方式修改您的代码:


  1. worksheet.set_row(0, None, font_format)
复制代码


这会将第一行的行高设置为默认大小(None),并将 font_format 应用于该行。请注意,您还可以使用 set_default_row() 方法设置整个工作表的默认行高和格式。

要将日期格式应用于 Job_Start_DateJob_End_Date 列,请按照以下方式修改您的代码:


  1. worksheet.set_column(
  2.     detail_filtered.columns.get_loc('Job_Start_Date'),
  3.     detail_filtered.columns.get_loc('Job_End_Date'),
  4.     None,
  5.     date_format
  6. )
复制代码


这会将 Job_Start_DateJob_End_Date 列中所有单元格的列宽设置为默认大小(None),并将 date_format 应用于该列。请注意,您还可以使用 set_default_column() 方法设置整个工作表的默认列宽和格式。此外,当您调用 set_column() 方法时,如果未指定列宽,则会将其设置为 8.43 字符宽度。如果不希望设置固定的列宽,您可以将列宽参数设置为 None。

最后,请确保在创建 ExcelWriter 对象时指定 datetime_format 参数,以便将日期格式应用于整个工作表:


  1. writer = pd.ExcelWriter(
  2.     'Detail for ' + key + '.xlsx',
  3.     engine='xlsxwriter',
  4.     date_format='yyyy-mm-dd',
  5.     datetime_format='yyyy-mm-dd'
  6. )
复制代码


此参数是必需的,因为它指示 xlsxwriter 库将日期数据编写为日期单元格格式。

综上所述,以下是修改后的完整代码:


  1. writer = pd.ExcelWriter(
  2.     'Detail for ' + key + '.xlsx',
  3.     engine='xlsxwriter',
  4.     date_format='yyyy-mm-dd',
  5.     datetime_format='yyyy-mm-dd'
  6. )

  7. detail_filtered.to_excel(writer, sheet_name='Detail', index=False, freeze_panes=(1, 5))

  8. workbook = writer.book
  9. font_format = workbook.add_format({'font_name': '微软雅黑', 'font_size': 10})
  10. date_format = workbook.add_format({
  11.     'num_format': 'yyyy-mm-dd',
  12.     'font_name': '微软雅黑',
  13.     'font_size': 10
  14. })

  15. worksheet = writer.sheets['Detail']
  16. worksheet.set_row(0, None, font_format)
  17. worksheet.set_column(
  18.     detail_filtered.columns.get_loc('Job_Start_Date'),
  19.     detail_filtered.columns.get_loc('Job_End_Date'),
  20.     None,
  21.     date_format
  22. )

  23. writer.save()
复制代码


希望这可以解决您的问题。如果您还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 20:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表