Python-PPTX区域图表透明度

时间:2017-07-01 17:23:24

标签: python python-pptx

我有一个使用Python PPTX创建的区域图,我需要设置系列的填充透明度。我通过以下解决方法功能实现了这一点,但它似乎太复杂了。我希望python-pptx提供实用程序功能,这样就不需要破解lxml了。

from lxml.etree import Element, SubElement, QName
ns = "http://schemas.openxmlformats.org/drawingml/2006/main"

xPr = prs.slides[3].placeholders[17].chart.series[0].format.fill._xPr
srgbClr = xPr.get_or_change_to_solidFill().get_or_change_to_srgbClr()
alpha = SubElement(srgbClr, QName(ns ,'alpha'), nsmap={'a':ns})
alpha.set('val','50196')

实现这一目标的更简洁方法是什么?

1 个答案:

答案 0 :(得分:1)

嗯,我不确定这是多么干净,但如果你想尽可能多地使用python-pptx电话,这可能是另一种考虑因素:

from pptx.dml.color import RGBColor
from pptx.oxml.xmlchemy import OxmlElement

# ---set the fill to solid red using regular python-pptx API---
chart_fill = prs.slides[3].placeholders[17].chart.series[0].format.fill
chart_fill.solid()
chart_fill.fore_color.rgb = RGBColor(255, 0, 0)

# ---add an `a:alpha` child element---
solidFill = chart_fill.fore_color._xFill
alpha = OxmlElement('a:alpha')
alpha.set('val', '50196')
solidFill.srgbClr.append(alpha)

一般概念是python-pptx API对象(如chartformat)是lxml元素的代理对象。 API对象在私有变量中组合(“包装”)lxml元素对象。例如,对于自动形状,私有变量为Shape._sp。尽可能(几乎总是),该变量与元素具有相同的名称,例如_sp的{​​{1}}。有时元素可以有不同的名称。在这种情况下,我用<p:sp>替换变量部分。所以x有时可能是 a:solidFill 对象,而有时可能是 a:pattFill 对象。

此外,前段时间我开始使用_xFill作为代理元素的变量名称,因此它是标准化的。通常我都有(例如._element_sp引用相同的元素对象),因为它们在不同情况下很方便。

要知道变量名是什么,你可以猜测(一旦你知道模式,它比你想象的更频繁),或者你可以检查代码或内省对象。在找到正确的代理对象后,单击API文档中的_element链接是检查代码的快速方法。 http://python-pptx.readthedocs.io/en/latest/api/dml.html#pptx.dml.color.ColorFormat