Python3和OpenPyxl版本2.3.2如何删除散点图网格线?
from openpyxl.chart.axis import ChartLines
SCchart = ScatterChart()
SCchart.title = "Scatter Chart"
SCchart.style = 13
SCchart.x_axis.majorGridlines = False
给出错误: TypeError:期望的类'openpyxl.chart.axis.ChartLines‘
还有这个:
SCchart.x_axis.ChartLines.majorUnit = False
给出错误: AttributeError:'NumericAxis‘对象没有属性'ChartLines’我要删除所有图表网格线。
发布于 2018-03-31 05:06:22
我无法在Openpyxl 2.51中做到这一点,甚至使用了一些技巧,比如将网格线设置为白色(十六进制的'FFFFFF')。我可以使用openpyxl接近于访问line参数,但是不能让它工作。我在这里介绍了我的努力,希望其他人能拿起球。巨蟒的要点:
from openpyxl.chart.shapes import GraphicalProperties
# turn majorGridlines off using shapes.GraphicalProperties
sgp = GraphicalProperties(solidFill='FFFFFF') # White
chart.y_axis.majorGridlines.spPr = sgp
这是openpyxl写的XML:
<valAx>
<axId val="2" />
<scaling>
<orientation val="minMax" />
<min val="0" />
</scaling>
<axPos val="l" />
<majorGridlines>
<spPr>
<a:solidFill>
<a:srgbClr val="FFFFFF" />
</a:solidFill>
<a:ln>
<a:prstDash val="solid" />
</a:ln>
</spPr>
</majorGridlines>
当我打开openpyxl刚刚用Excel2010编写的电子表格时,主要的网格线仍然是深灰色的。我点击它们,将它们的颜色设置为白色,并使用新的文件名保存文件。下面是excel编写新的xml代码的方式:
<c:valAx>
<c:axId val="83446016"/>
<c:scaling>
<c:orientation val="minMax"/>
<c:min val="0"/>
</c:scaling>
<c:delete val="0"/>
<c:axPos val="r"/>
<c:majorGridlines>
<c:spPr>
<a:ln>
<a:solidFill>
<a:schemeClr val="bg1"/>
</a:solidFill>
<a:prstDash val="solid"/>
</a:ln>
</c:spPr>
</c:majorGridlines>
因此,从逻辑上讲,您可能认为这个python可以工作(剧透了,不适合我!):
chart.y_axis.majorGridlines.spPr.ln = sgp
正确的方法(微软使用的方法)是将网格线设置为NoFill。在excel中关闭网格线,保存文件并查看chart.xml文件会产生以下结果:
<c:valAx>
<c:axId val="83031552"/>
<c:scaling>
<c:orientation val="minMax"/>
<c:min val="0"/>
</c:scaling>
<c:delete val="0"/>
<c:axPos val="r"/>
<c:majorGridlines>
<c:spPr>
<a:ln>
<a:noFill/>
<a:prstDash val="solid"/>
</a:ln>
</c:spPr>
</c:majorGridlines>
python应该类似于:
sgp = GraphicalProperties(noFill=True) # bonks, tried None also not effective
chart.y_axis.majorGridlines.spPr.ln = sgp
或者也许
chart.y_axis.majorGridlines.spPr.ln.noFill = True
这也是因为在此openpyx1路径中没有ln或line。
发布于 2018-08-03 02:57:07
不确定之前的回答是否结束了这个帖子,但基于这些建议和一些调整,我能够为折线图启用/禁用网格线,添加数据标签。
使用了以下代码:
from openpyxl.chart.shapes import GraphicalProperties
from openpyxl.drawing.line import LineProperties
from openpyxl.chart.axis import ChartLines
from openpyxl.chart.label import DataLabelList
c1.y_axis.majorGridlines.spPr = GraphicalProperties(noFill = 'True')
c1.y_axis.majorGridlines.spPr.ln = LineProperties(solidFill = '000000')
c1.x_axis.majorGridlines = ChartLines()
c1.x_axis.majorGridlines.spPr = GraphicalProperties(noFill = 'True')
c1.x_axis.majorGridlines.spPr.ln = LineProperties(solidFill = '000000')
c1.dLbls = DataLabelList()
c1.dLbls.showVal = 1
基本上,某些参数class需要分配给它们一个类实例,以便更改后续的子参数。对于ex。当您尝试将一个值设置为spPr时,返回的错误将指定它所需的类,然后您可以导入该类并将其实例分配给变量。除此之外,xml可以极大地帮助您确定哪些变量需要更改。希望这能帮上忙..
https://stackoverflow.com/questions/48755936
复制相似问题