使用 Xlsx writer,我想编写遵循操作系统区域/语言设置设置的区域设置格式的日期。例如,加拿大操作系统设置的默认格式是“yyyy-mm-dd”,而德国操作系统设置的默认格式是“dd.mm.yy”。如何使日期响应?
我已经阅读了文档,但仍然无法弄清楚。
这是我尝试过的:
import xlsxwriter
from datetime import date
workbook = xlsxwriter.Workbook('sample.xlsx')
worksheet = workbook.add_worksheet()
my_date = date(2020, 1, 31)
my_format = workbook.add_format({'num_format': 'mm/dd/yyyy'})
worksheet.write(0, 0, my_date, my_format)
workbook.close()
在设置为英语-加拿大的 Excel 中,我期望“2020-01-31”,但得到“01-31-2020”
在设置为德语的 Excel 中,我期望“31.01.20”,但得到“01.31.2020”。
所以它设法使用正确的分隔符,但其余的都是错误的。
提前致谢
最佳答案
第一个问题是是否可以在 Excel 中设置日期格式,该格式将根据您想要的方式更改以匹配区域设置。我认为不是。
如果您在 Excel 中设置任何“mm-dd-yyyy”样式格式,那么您将在其他区域设置中获得该格式(分隔符除外)。
因此,如果在 Excel 中不可能,则在 XlsxWriter 中也不可能(同样,如果在 Excel 中可能,那么在 XlsxWriter 中也将同样工作)。
一个部分解决方法是使用 in-built Excel number formats 之一在 XlsxWriter 中。这些是数字索引而不是字符串:
import xlsxwriter
from datetime import date
workbook = xlsxwriter.Workbook('sample.xlsx')
worksheet = workbook.add_worksheet()
my_date = date(2020, 1, 31)
my_format = workbook.add_format({'num_format': 14})
worksheet.write(0, 0, my_date, my_format)
workbook.close()
此日期(2020 年 12 月 31 日)在加拿大语言环境中为 20-12-31
,在德国语言环境中为 31.12.20
。但是,没有任何内置格式可以提供 4 位数的年份。
另请参阅Number Format Categories和 Number Formats in different locales在 XlsxWriter 文档中。
关于Python Xlsxwriter - 使日期尊重不同的区域设置格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60083707/