好吧,我不确定它是否干净得多,但如果你想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 对象喜欢chart
并且format
是lxml 元素的代理对象。API 对象在私有变量中组成(“包装”)lxml 元素对象。例如,对于自选图形,私有变量是Shape._sp
. 在可能的情况下(几乎总是),该变量与元素具有相同的名称,例如_sp
for <p:sp>
。有时元素可以有不同的名称。在这种情况下,我将可变部分替换为x
. 所以_xFill
有时可能是a:solidFill对象,有时可能是 a: pattFill对象。
此外,不久前我开始使用._element
代理元素的变量名,因此它是标准化的。通常我都有(例如_sp
并_element
引用相同的元素对象),因为它们在不同的情况下都很方便。
要知道变量名称是什么,您可以猜测(一旦您知道模式,它的工作频率可能比预期的要高),或者您可以检查代码或内省对象。[source]
找到正确的代理对象后,单击 API 文档中的链接是检查代码的快速方法。http://python-pptx.readthedocs.io/en/latest/api/dml.html#pptx.dml.color.ColorFormat