如何在工作簿中定位图表

时间:2014-05-12 19:29:15

标签: python excel python-2.7 charts openpyxl

我正在运行python2.7,并使用openpyxl版本1.8.6。我能够很好地生成图表,但无法找到任何表明图表可以定位在工作表中的特定位置的内容。任何帮助将不胜感激。

我使用以下代码生成图表:

ws = wb2.get_sheet_by_name('Traffic Data')
rowcount = ws.get_highest_row()
values = Reference(ws,(1,1), (rowcount - 1,1))
labels = Reference(ws,(0,1),(rowcount,0))
title = "Events recorded in " + str(datetime.datetime.strptime(str(runmonth), '%m').strftime('%B'))
series = Series(values, title=title)
chart.add_series(series)
ws = wb2.get_sheet_by_name('Traffic Incidents')
ws.add_chart(chart)

3 个答案:

答案 0 :(得分:1)

根据source code,使用add_chart()将图表添加到工作表时,无法设置图表的确切位置。

考虑切换到xlsxwriter模块。引自Working with Charts

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

# Add a series to the chart.
chart.add_series({'values': '=Sheet1!$A$1:$A$6'})

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

答案 1 :(得分:1)

我可以使用chart.drawing来抵消图表位置。具体来说,我用过:

chart.drawing.left = 1000

这使图表偏移约11个单元格。我不确定像素到细胞的映射,但可以通过一些试验轻松进行逆向工程。

答案 2 :(得分:0)

实际上很难在Excel中设置任何对象的位置,因为它对单元格宽度使用了一个荒谬的愚蠢系统:这些是基于特定字体和大小的字符数加上一些填充的宽度。另一方面,图表必须使用像素定位。我们在工作表中有point_pos()方法,但我不相信它。我们刚刚发布了2.0代码更清晰的代码。基本上,您可以使用chart.drawing属性来获取所需的大小。

请查看charts / chart.py中的代码以获取更多信息。下一个版本应该更舒服一点。