在 xlsxwriter 中更改 add_table worksheet writer 的数字格式
Change number format for add_table worksheet writer in xlsxwriter
我想将 excel table 中的数字格式从 1000,12
调整为欧洲风格(带千位分隔符):1.000,12
和 python.
在 excel 中,格式设置为:#.##0,00
当我想在我的工作簿中与 xlsxwriter
一起使用它时(扁平化是一个数据框 table):
import xlsxwriter
workbook = xlsxwriter.Workbook('excel.xlsx', options={'nan_inf_to_errors': True})
worksheet1 = workbook.add_worksheet('table1')
numbersformat = workbook.add_format({'num_format': '#.##0,00'})
worksheet1.add_table(3, 1, flattened.shape[0]+3, flattened.shape[1],
{'data': flattened.values.tolist(),
'columns': [{'header': c} for c in flattened.columns.tolist()],
'style': 'Table Style Medium 9',
'format': numbersformat})
我得到一个空数据框。无论哪里导致 table:
的结果
worksheet1.add_table(3, 1, flattened.shape[0]+3, flattened.shape[1],
{'data': flattened.values.tolist(),
'columns': [{'header': c} for c in flattened.columns.tolist()],
'style': 'Table Style Medium 9',})
我的数据框 flattened
看起来像这样:
Department Name Month:1 Month:2 Month:All
Bistro Ama 82.75 82.75
Bistro Beb 100.00 212.00 312.00
All 182.75 212.00 394.75
I want to adjust my numbers format in my excel table from 1000,12 to the European style (with thousand separator): 1.000,12 with python.
In excel the format is set-up with: #.##0,00
这里的问题是,即使格式显示为 #.##0,00
,它实际上被 Excel 存储为 #,##0.00
(即美国语言环境)。您的 OS 可能有默认的千位分隔符“.” "," 和 Excel 的小数分隔符在读取和显示值时将 #,##0.00
更改为 #.##0,00
。
如果您将代码更改为具有美式格式,您的程序应该会按预期运行:
numbersformat = workbook.add_format({'num_format': '#,##0.00'})
更新:
您还在错误的地方添加了格式。它是列的一个 属性 而不是整个 table。这是一个工作示例:
import pandas as pd
import xlsxwriter
flattened = pd.DataFrame({'Department': ['Bistro', 'Bistro', 'All'],
'Name': ['Ama', 'Beb', None],
'Month:1': [182.75, 1100.00, 1182.75],
'Month:2': ['', 1212.00, 1212.00],
'Month:All': [182.75, 2312.00, 2394.75]})
# Set the dataframe column order.
flattened = flattened[['Department', 'Name', 'Month:1',
'Month:2', 'Month:All']]
workbook = xlsxwriter.Workbook('excel.xlsx',
options={'nan_inf_to_errors': True})
worksheet1 = workbook.add_worksheet('table1')
# Make the columns wider for clarity.
worksheet1.set_column(1, flattened.shape[1], 11)
numbersformat = workbook.add_format({'num_format': '#,##0.00'})
worksheet1.add_table(3, 1, flattened.shape[0]+3, flattened.shape[1],
{'data': flattened.values.tolist(),
'columns': [{'header': c, 'format': numbersformat}
for c in flattened.columns.tolist()],
'style': 'Table Style Medium 9'})
workbook.close()
输出:
当 Windows 或 macOS 区域设置有“,”作为小数点分隔符和“.”时,这里是同一个文件。作为千位分隔符:
差异在 XlsxWriter 文档中进行了解释:Number Formats in different locales。
我想将 excel table 中的数字格式从 1000,12
调整为欧洲风格(带千位分隔符):1.000,12
和 python.
在 excel 中,格式设置为:#.##0,00
当我想在我的工作簿中与 xlsxwriter
一起使用它时(扁平化是一个数据框 table):
import xlsxwriter
workbook = xlsxwriter.Workbook('excel.xlsx', options={'nan_inf_to_errors': True})
worksheet1 = workbook.add_worksheet('table1')
numbersformat = workbook.add_format({'num_format': '#.##0,00'})
worksheet1.add_table(3, 1, flattened.shape[0]+3, flattened.shape[1],
{'data': flattened.values.tolist(),
'columns': [{'header': c} for c in flattened.columns.tolist()],
'style': 'Table Style Medium 9',
'format': numbersformat})
我得到一个空数据框。无论哪里导致 table:
的结果worksheet1.add_table(3, 1, flattened.shape[0]+3, flattened.shape[1],
{'data': flattened.values.tolist(),
'columns': [{'header': c} for c in flattened.columns.tolist()],
'style': 'Table Style Medium 9',})
我的数据框 flattened
看起来像这样:
Department Name Month:1 Month:2 Month:All
Bistro Ama 82.75 82.75
Bistro Beb 100.00 212.00 312.00
All 182.75 212.00 394.75
I want to adjust my numbers format in my excel table from 1000,12 to the European style (with thousand separator): 1.000,12 with python.
In excel the format is set-up with:
#.##0,00
这里的问题是,即使格式显示为 #.##0,00
,它实际上被 Excel 存储为 #,##0.00
(即美国语言环境)。您的 OS 可能有默认的千位分隔符“.” "," 和 Excel 的小数分隔符在读取和显示值时将 #,##0.00
更改为 #.##0,00
。
如果您将代码更改为具有美式格式,您的程序应该会按预期运行:
numbersformat = workbook.add_format({'num_format': '#,##0.00'})
更新:
您还在错误的地方添加了格式。它是列的一个 属性 而不是整个 table。这是一个工作示例:
import pandas as pd
import xlsxwriter
flattened = pd.DataFrame({'Department': ['Bistro', 'Bistro', 'All'],
'Name': ['Ama', 'Beb', None],
'Month:1': [182.75, 1100.00, 1182.75],
'Month:2': ['', 1212.00, 1212.00],
'Month:All': [182.75, 2312.00, 2394.75]})
# Set the dataframe column order.
flattened = flattened[['Department', 'Name', 'Month:1',
'Month:2', 'Month:All']]
workbook = xlsxwriter.Workbook('excel.xlsx',
options={'nan_inf_to_errors': True})
worksheet1 = workbook.add_worksheet('table1')
# Make the columns wider for clarity.
worksheet1.set_column(1, flattened.shape[1], 11)
numbersformat = workbook.add_format({'num_format': '#,##0.00'})
worksheet1.add_table(3, 1, flattened.shape[0]+3, flattened.shape[1],
{'data': flattened.values.tolist(),
'columns': [{'header': c, 'format': numbersformat}
for c in flattened.columns.tolist()],
'style': 'Table Style Medium 9'})
workbook.close()
输出:
当 Windows 或 macOS 区域设置有“,”作为小数点分隔符和“.”时,这里是同一个文件。作为千位分隔符:
差异在 XlsxWriter 文档中进行了解释:Number Formats in different locales。