Django / python和与xlwt语言环境格式化的isues

我正在使用django-excel-view使用django-excel-response来反过来使用xlwt。 我有一个场景,用户可以切换语言环境,让他们查看带有标准小数点的浮点数,或者在某些语言中使用逗号小数点。

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

什么是正确的xlwt样式申请的xls正确使用逗号小数保存,什么是一个好方法来检查一个值是逗号小数,应该有这种风格应用? 换一种说法:

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语言环境添加)执行一些正则expression式检查,然后用小数点replace逗号。

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

jmcnamara帮助指向我在这个方向,而不是搞乱地区和xlwt格式。

我有一个场景,用户可以切换语言环境,让他们查看带有标准小数点的浮点数,或者在某些语言中使用逗号小数点。

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

因此,如果在一个语言环境中,数字格式在Excel中显示为1,234.56而在另一个语言环境中则显示为1.234,56在这两种情况下,格式 1.234,56 存储在Excel中: 0,000.00

所以,当使用xlwt或其他电子表格书写模块时,您应该使用美式格式选项(逗号分别为千位和十进制)。 它将根据其Windows设置显示在用户区域中。

您可以使用easyxf但也可以使用xwlt风格,如:

 # You can change the format to more or less decimals decimal_style.num_format_str = '0.0000' sheet.write(0, 0, 3.18526119, decimal_style) # Example to write sheet.write(0, 1, 1.11, decimal_style) # Another example 

如果你想使用easyxf你可以这样做:

 decimal_style = easyxf(num_format_str='0.00') sheet.write(0, 0, '999.99', decimal_style) 

你可以看看这个例子来获取更多信息Python:编写xlwt文件