Python OpenPyxl删除Scatter Chart网格线?

时间:2018-02-12 21:39:26

标签: python-3.x openpyxl

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' 我想删除所有图表网格线。

3 个答案:

答案 0 :(得分:1)

我刚发现一个有效的答案!您不需要导入ChartLines。诀窍是我需要包含另一个类来使线条工作如下:

  

来自openpyxl.drawing.line导入LineProperties

to filter-map
  let List_A [0 1 0 1 1 ]
  let List_B [ "residential" "industrial" "commercial" "farmland" "preservation"]

  print filter [ i -> i != 0 ] ( map [ [ a b ] -> ifelse-value (a = 1) [b] [0] ] List_A List_B)
end

尝试一下!

答案 1 :(得分:1)

不确定先前的答案是否结束了该主题,但是基于这些建议和一些调整,我能够为折线图启用/禁用网格线,添加数据标签。

使用了以下代码:

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

基本上,某些参数1st需要将一个类实例分配给它们,以便更改后续子参数。 对于前。当您尝试为spPr设置值时,抛出的错误将指定期望的类,然后可以导入该类并将其实例分配给该变量(如果可以的话)。除此之外,xml可以极大地帮助您确定哪些变量需要更改。希望对您有所帮助。

答案 2 :(得分:0)

我无法使用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刚用Excel 2010编写的电子表格时,主要的网格线仍然是深灰色。我点击它们并将它们的颜色设置为白色并使用新文件名保存文件。这就是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

正确的方法(Microsoft使用的方法)是将网格线设置为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

也因为这个openpyxl路径中没有ln或line而出现问题。