xlsxwriter:如果类别名称中有点和下划线,图表将从 excel 文件中删除

xlsxwriter: chart is removed from excel file if dot and underscore in category names

有点不明白:

import xlsxwriter

workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()

# Create a new Chart object.
chart = workbook.add_chart({'type': 'column'})

# Write some data to add to plot on the chart.
names_ok = ['A', 'B']
names_notok = ['1.1_1', '2.2_2']
data = [1, 2]

worksheet.write_row('A1', names_notok)
worksheet.write_row('A2', data)

chart.add_series({
    'values':     ['Sheet1', 1, 0, 1, 4],
    'categories': ['Sheet1', 0, 0, 0, 4],
})

# Insert the chart into the worksheet.
worksheet.insert_chart('A4', chart)

workbook.close()

运行 这个脚本在第 14 行使用 names_ok 没问题,一切都符合预期。如果使用 names_notok,则 python 没有错误。但是用Office 2016打开后,Excel报错,将图表从sheet.

中移除

这是 XlsxWriter 中的一个错误。

首先,您可以通过向系列中添加一个空 category_data 列表 属性 来解决此问题:

import xlsxwriter

workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()

chart = workbook.add_chart({'type': 'column'})

names_notok = ['1.1_1', '2.2_2']
data = [1, 2]

worksheet.write_row('A1', names_notok)
worksheet.write_row('A2', data)


chart.add_series({
    'categories':      ['Sheet1', 0, 0, 0, 1],
    'values':          ['Sheet1', 1, 0, 1, 1],
    'categories_data': [],
})

worksheet.insert_chart('A4', chart)

workbook.close()

输出:

出现此问题是因为 '1.1_1' 是一个字符串,但可以计算为浮点数,因为下划线在 PEP-0515:

之后有效
>>> float('1.1_1')
1.11

更新:修复了 xlsxwriter main.