gpt4 book ai didi

python - Django/python 和 xlwt 区域设置格式问题

转载 作者:太空狗 更新时间:2023-10-30 02:30:56 24 4
gpt4 key购买 nike

我正在使用 django-excel-view,它使用 django-excel-response,而 django-excel-response 又使用 xlwt。我有一个场景,用户可以切换区域设置,让他们查看带有标准小数点的 float ,或者在某些语言中使用逗号小数点。

当将 View 导出为具有标准小数点区域设置的 xls 时,它工作得很好,但使用逗号小数会使 xls 文件将 float 存储为文本并在数字前添加撇号(例如 '123,45)。我感觉 ExcelResponse ( https://djangosnippets.org/snippets/1151/) 没有正确处理 float (请参阅该代码段的第 43 行之后)。

应用逗号小数正确保存 xls 的正确 xlwt 样式是什么?检查值是否为逗号小数并应应用该样式的好方法是什么?换句话说:

styles = {'datetime': xlwt.easyxf(num_format_str='yyyy-mm-dd hh:mm:ss'),
'date': xlwt.easyxf(num_format_str='yyyy-mm-dd'),
'time': xlwt.easyxf(num_format_str='hh:mm:ss'),
'default': xlwt.Style.default_style,
'comma_decimal': xlwt.easyxf('????????')}

for rowx, row in enumerate(data):
for colx, value in enumerate(row):
if isinstance(value, datetime.datetime):
cell_style = styles['datetime']
elif isinstance(value, datetime.date):
cell_style = styles['date']
elif isinstance(value, datetime.time):
cell_style = styles['time']
elif isinstance(value, ?????????????):
cell_style = styles['comma_decimal']
else:
cell_style = styles['default']
sheet.write(rowx, colx, value, style=cell_style)

解决方案:

我最后在 django-excel-response 中添加了一个额外的检查,它对逗号浮点值进行一些正则表达式检查(由 django 语言环境按应有的方式添加),然后用小数点替换逗号。

elif (re.compile("^[0-9]+([,][0-9]+)?$")).match(u"{}".format(value)):
value = float(value.replace(',', '.'))

jmcnamara 帮助我指明了这个方向,而不是搞乱语言环境和 xlwt 格式。

最佳答案

I have a scenario where users can switch locale which lets them view floats with a standard decimal point or in some languages a comma decimal point.

这里需要注意的重要一点是,区域设置的千位/小数点分隔符是 Windows 设置,而不是 Excel 设置。它在控制面板/区域和语言选项/格式或类似的地方设置。

因此,如果在一个区域设置中数字格式在 Excel 中显示为 1,234.56,而在另一个区域设置中它显示为 1.234,56 在这两种情况下 格式以美国样式存储在 Excel 中:0,000.00

因此,在使用 xlwt 或任何其他电子表格编写模块时,您应该使用美式格式选项(逗号代表千位,. 代表小数)。然后它将根据用户的 Windows 设置显示在用户区域设置中。

关于python - Django/python 和 xlwt 区域设置格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com