在 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