鱼C论坛

 找回密码
 立即注册
查看: 1741|回复: 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)
想知道小甲鱼最近在做啥?请访问 -> 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,表示自适应宽度。
想知道小甲鱼最近在做啥?请访问 -> 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 两个格式,但是没有将它们应用到工作表中。

要将字体格式应用到第一行,请按照以下方式修改您的代码:
worksheet.set_row(0, None, font_format)

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

要将日期格式应用于 Job_Start_DateJob_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_DateJob_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()

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-13 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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