为不同 cultures/countries 格式化 xlsx 日期列(英国与美国)

Formatting xlsx date column for different cultures/countries (UK vs USA)

恐怕我无法设置一个完美的重现,但我希望我能得到一些提示。

我的应用程序服务器在英国,设置为英国,而我要向其提供此增强功能的最终用户在美国,设置为美国。

所以我尝试通过格式化Python中的日期field/column来方便日期类型转换,如下

d.strftime('%m/%d/%Y')

然后我用

的格式写xlsx
format3 = workbook.add_format({'num_format': 'mm/dd/yy'})
worksheet.write(row, col,  item[0], format3)

当我打开 xlsx 并尝试按日期过滤时,该列未被 Excel 正确识别为日期。这是仅对我在英国的问题还是对我在美国的用户也有问题?

奖励积分

我已经看到答案了,现在我有一个更难的问题。 假设我在英国。如果我将单元格保存为 Excel 中的日期,当我的用户在美国打开它时,他们会看到本地化格式的单元格。

如何在 python xlsx 中实现它?

这是我试过的

import xlsxwriter
from datetime import date
mydate = date(2021,12,29)
path = 'C:\my\path\test.xlsx'
wb = xlsxwriter.Workbook(path)
format = wb.add_format({'num_format': 'dd/mm/yyyy'})
ws = wb.add_worksheet('mydates')
ws.write(0,0,'date')
ws.write(1,0,mydate, format)
wb.close()

当我在 excel 中打开它时,它说这是一个日期,不是自定义的。

但是当我从 cmd control international 启动并选择不同的语言格式(假设我从英国切换到美国)并再次打开 xlsx 时,日期格式没有转换

I try to facilitate date type conversion

根本不会尝试“促进日期类型转换string 那样。单元格的 可视化格式 与单元格 内容值 完全不相交,因此请将您的代码(关于格式可视化)保留为 workbook.add_formatworksheet.write

format3 = workbook.add_format({'num_format': 'mm/dd/yy'})
worksheet.write(row, col,  item[0], format3)

但删除那个愚蠢的字符串格式(在内容值中):

d # .strftime('%m/%d/%Y')

它在 xlsxwriter 中开箱即用,使用原生 Python 与 Excel 日期类型。

奖励积分

有一个获得奖励积分的魔术。您必须使用 Excel 标准日期格式:它是数字 14,十六进制 E .

format = wb.add_format()
format.set_num_format(0x0E)

完成!