使用Openpyxl写入Excel时的日期格式与数据类型转换问题
解决Openpyxl写入Excel日期格式与数据类型问题
我来帮你搞定这个日期格式的问题!核心原因是你虽然写入了日期对象,但没有给目标单元格设置日期格式规则,所以Excel只能用默认的"常规"格式来显示这个日期值。下面是具体的修正方案:
问题分析
你的代码里把date.today()转成字符串再转回date对象的操作其实是多余的——openpyxl本身支持直接写入date或datetime类型的数据。但关键缺失的一步是:告诉Excel这个单元格应该用日期格式来展示,而不是默认的常规格式。
修正后的代码
from openpyxl import load_workbook from datetime import date from openpyxl.styles import numbers # 导入数字格式模块 workbookName = "Excel workbook.xlsm" # 加载工作簿,保留VBA和仅加载单元格值 wb = load_workbook(workbookName, data_only=True, keep_vba=True) ws = wb["Sheet1"] rowCount = 2000 insertRow = rowCount + 7 # 直接获取当前日期,不需要多余的字符串转换 insertDate = date.today() dateCell = ws.cell(row=insertRow, column=1) dateCell.value = insertDate # 关键:设置单元格的数字格式为mm/dd/yyyy,让Excel识别为日期类型 dateCell.number_format = numbers.FORMAT_DATE_XLSX_MMDDYYYY # 保存工作簿 wb.save("Excel workbook.xlsm")
关键细节说明
- 不用再做字符串转日期的来回转换:
date.today()直接就是openpyxl能识别的日期类型,直接赋值给单元格即可。 - 设置
number_format是核心:通过numbers.FORMAT_DATE_XLSX_MMDDYYYY(这是openpyxl内置的标准日期格式常量),或者你也可以直接写字符串'mm/dd/yyyy',两种方式都能让Excel把单元格标记为日期类型,并按照指定格式显示。 - 如果你想自定义其他日期格式,也可以直接写格式字符串,比如
'dd-mm-yyyy',只要符合Excel的格式规则就行。
这样修改后,单元格就会被Excel识别为日期类型,并且以mm/dd/yyyy的格式显示啦!
内容的提问来源于stack exchange,提问作者Nathan Anderson
相关产品推荐
相关产品推荐

