我被分配了一个“简单”任务,将一系列数据列收集到结果工作簿中.结果工作簿包含必要的公式和图表以分析结果.数据是由我使用python作为一系列Excel工作簿编写的图像分析应用程序生成的.
现在的问题是,openpyxl会删除excel工作簿中的所有现有图表.我花了整整一天的时间弄清楚如何使用openpyxl图表,其中有一些文档和图表错误栏,但没有任何示例.有简短评论的来源.
使用win32com扩展名将允许直接与Excel进行交互,但是除非在Windows中并且已安装Excel,否则显然无法正常工作.事实并非如此.还试图弄清楚如何与Excel交互可能需要一些时间,而不是从VBA宏中进行.
..
对于设置图表样式,有一种相对不错的方法,其工作原理如下:
valuewidth=openpyxl.utils.units.points_to_pixels(2.25)
valuewidth=openpyxl.utils.units.pixels_to_EMU(valuewidth)
redcolor=openpyxl.drawing.colors.ColorChoice(prstClr="red")
bluecolor=openpyxl.drawing.colors.ColorChoice(prstClr="blue")
xvalues = openpyxl.chart.Reference(exceldata.sheetrep, min_col=exceldata.seriesx['column'], min_row=exceldata.seriesx['row'], max_row=exceldata.seriesx['row']+exceldata.seriesx['rows'])
values = openpyxl.chart.Reference(exceldata.sheetrep, min_col=exceldata.seriesy['column'], min_row=exceldata.seriesy['row'], max_row=exceldata.seriesy['row']+exceldata.seriesy['rows'])
series = openpyxl.chart.Series(values, xvalues, title_from_data=True)
series.graphicalProperties.line.width=valuewidth
series.graphicalProperties.line.solidFill=bluecolor
chart.series.append(series)
现在要使用错误栏,必须像这样定义和创建它们:
errorwidth=openpyxl.utils.units.points_to_pixels(1)
errorwidth=openpyxl.utils.units.pixels_to_EMU(errorwidth)
errorlinetype=openpyxl.drawing.line.LineProperties(w=errorwidth, solidFill=redcolor)
errorline=openpyxl.chart.shapes.GraphicalProperties(ln=errorlinetype)
values = openpyxl.chart.Reference(exceldata.sheetrep, min_col=exceldata.lowerlim['column'], min_row=exceldata.lowerlim['row'])
xvalues = openpyxl.chart.Reference(exceldata.sheetrep, min_col=exceldata.lower['column'], min_row=exceldata.lower['row'])
chart.title="LL"
errorbar=openpyxl.chart.error_bar.ErrorBars(errBarType="minus",errValType="percentage",val=100.0, spPr=errorline)
errorbar.NumDataRef="LL"
series = openpyxl.chart.Series(values, xvalues, title=None, title_from_data=False)
series.errBars=errorbar
chart.series.append(series)
现在,我想知道是否有一种方法可以通过首先定义用于创建GraphicalProperties对象的LineProperty来跳过构建该spPr对象,然后在实例化期间将其馈送到ErrorBars方法.
那NumDataRef似乎什么也没做.没有记录.
编辑在任何情况下,对NumDataRef的调用都可能是错误的.加号和减号参数期望NumDataSource属于NumDataRef.正确的语法可能还是第一步创建两步的过程
foo = openpyxl.chart.data_source.NumRef(f="bar")
然后跟进
minus = openpyxl.chart.data_source.NumDataSource(numRef="foo")
我不确定numRef实际指的是什么,如果它是单元格,系列名称或其他名称.
如果任何人都可以贡献“ plus”,“ minus”和“ val”参数的作用,那将是有帮助的.