防止 openpyxl 进行日期字段转换

问题描述 投票:0回答:1

我将 openpyxl 与 python 结合使用。我有长日期类型的列,例如 01 一月 2000 。导入 Excel 文件时,openpyxl 会自动从日期转换为简短示例 2000-01-01 00:00:00。我没有看到这种转换,我需要使用 excel 文件的长日期,将 excel 文件的信息保留为通用格式

wb = load_workbook("test.xlsx")
ws = wb.worksheets[0].values
header = next(ws) #get the header row

my_data = []
for row in ws:                     
    my_data.append(dict(zip(header, row)))
    print(row)

输出:

('300.0001.19', 'NGALULA MBUYAMBA BIBICHE', 'la troisième année de graduat', 'téchniques médicales', 'sage-femme ', 无, 无, 'Mikalayi', datetime.datetime(1980, 12, 10, 0, 0), 'donnant accès aux études superérieures et universitaires', 'de première et deuxième années de graduat en téchniques médicales', 'satisfaction', datetime.datetime(2019, 7, 28, 0, 0) , datetime.datetime(2023, 8, 17, 0, 0), datetime.datetime(2023, 7, 31, 0, 0), 6913, 'CXC', 'B', datetime.datetime (2023, 8, 17, 0, 0), '毕业') ('300.0002.19', 'DIPA MPONGO GRACIA', 'la troisième année de graduat', 'téchniques médicales', 'sage-femme ', 无, 无, 'Kananga', datetime.datetime(1996, 10, 5, 0, 0), 'donnant accès aux études superérieures et universitaires', 'de première et deuxième années de graduat en téchniques médicales', 'satisfaction', datetime.datetime(2019, 7, 28, 0, 0), datetime.datetime (2023, 8, 17, 0, 0), datetime.datetime(2023, 7, 31, 0, 0), 6914, 'CXC', 'B', datetime.datetime(2023, 8, 17, 0, 0 ),“毕业”)

python excel openpyxl datetime-format
1个回答
0
投票

当 Openpyxl 读取单元格值时,它会将类型转换为 Python 类型。
对于日期,这通常是 Python 日期时间值。
注意你在Excel中看到的只是Excel对单元格底层值使用的显示格式
例如,单元格显示“01 一月 2000”,其中格式“[$-C09]dd mmmm yyyy;@”应用于单元格。

因此,Excel 中作为“日期”的值“2000 年 1 月 1 日”将被读取为 Python 日期时间“2000-01-01 00:00:00”。

如果“01 一月 2000”是单元格中的字符串,Excel 将使用“常规”或“文本”显示格式,并且它将被读取为字符串并保留为“01 一月 2000”。

因此,您可以在 Excel 中将日期保存为字符串,如果适合您,则无需转换。
否则,您可以在从 Excel 读取该值后将其转换为字符串。

例如单元格所在位置

...
### Cell A1 contains a 'Date' displayed as '01 January 2000' by Excel date format
dtval = ws['A1'].value  # This value is type datetime 
print(dtval)  # This prints '2000-01-01 00:00:00'
strval = dtval.strftime("%d %B %Y")  # This converts datetime value to a string in the date format "%d %B %Y" 
print(strval)  # This prints string '01 January 2000'
© www.soinside.com 2019 - 2024. All rights reserved.