使用XlsxWriter在python 3.5中创建图表,其中系列值基于循环

时间:2016-10-18 22:18:02

标签: python excel graph charts xlsxwriter

我在Windows 10上使用Python 3.5。希望我能清楚地表达我想要完成的事情,同时尽量避免混淆......

我编写了一个执行多个任务的Python脚本,其中一些任务包括根据脚本前面部分代码生成的数据通过XlsxWriter创建Excel工作簿。我试图让我的脚本也创建一个图表,再次使用XlsxWriter,基于这些数据。我已经看过几个在线可用的例子,虽然有用,但是这些例子和我自己的个人代码之间有一个特定的区别,这使我不确定如何继续。

尝试将图表添加到图表时,我的问题出现了。在配置系列时,我遇到的几个例子包括这样的内容(注意:我实际上并没有使用这个确切的代码):

chart.add_series({
'name': '=Sheet1!$A$2:$A$7 '
})

由于我的脚本的性质涉及循环和可变长度,所生成的数据可以填充在各个列和行中,所以我不能像'name'那样分配像'Sheet1!$ A $ 2这样的固定引用。 :$ A $ 7'因为尽管我的脚本生成的所有数据都存在于同一张纸上,但它永远不会只在“A”列中,而只会在第2到7列之间。

那么,我该如何解决这个问题呢?同样,由于变量项等,我告诉XlsxWriter填充单元格的方法是创建变量row_1 = 0col_1 = 0并根据需要递增它们。我能写出像

这样的东西
chart.add_series({
'name': '=Sheet1!row:col+7'
})

通过XlsxWriter?

编辑:所以我发现我可以使用替代索引,这似乎是我在图表中添加系列的解决方法。但是,我收到以下错误消息:

UserWarning: Must specify 'values' in add_series()
warn("Must specify 'values' in add_series()")

基于这段代码:

chart.add_series({
'Subscribers': ['Sheet1', row_1 + 2, col_1, 
               2 + len(sb_subCount_list_clean), col_1] 
})

这是因为我使用变量作为我的索引吗? sb_subCount_list_clean是一个列表,其中包含我用来创建图表的数据。该列将具有此长度加2,因为我有一些标头占据前两个单元格。

1 个答案:

答案 0 :(得分:0)

在XlsxWriter API的几乎所有部分中,只要有像A1这样的Cell引用或类似=Sheet1!$A$1的范围,就可以使用元组或值列表。对于图表,您可以使用以下值列表:

# String interface. This is good for static ranges.
chart.add_series({
    'name':       '=Sheet1!$A$1',
    'categories': '=Sheet1!$B$1:$B$5',
    'values':     '=Sheet1!$C$1:$C$5',
})

# Or using a list of values instead of name/category/value formulas:
#     [sheetname, first_row, first_col, last_row, last_col]
# This is better for generating programmatically.
chart.add_series({
    'name':       ['Sheet1', 0, 0      ],
    'categories': ['Sheet1', 0, 1, 4, 1],
    'values':     ['Sheet1', 0, 2, 4, 2],
})

请参阅docs

至于你得到的错误(编辑后):Subscribers不是XlsxWriter参数,你可能意味着values

 chart.add_series({
      'values': ['Sheet1', row_1 + 2, col_1, 
                 2 + len(sb_subCount_list_clean), col_1] 
 })