微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PPTX-Python`insert_chart`逐渐变慢

如何解决PPTX-Python`insert_chart`逐渐变慢

我们有一个应用程序可以创建包含超过1000张幻灯片的大型pptx,并且我们正在使用python-pptx库。

我们面临的问题是,随着演示文稿的增长,向其中添加元素和/或图表变得越来越慢。

from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches


SLD_LAYOUT_TITLE_AND_CONTENT = 1

prs = Presentation()

slide_layout = prs.slide_layouts[SLD_LAYOUT_TITLE_AND_CONTENT]
for idx in range(2000):
    slide = prs.slides.add_slide(prs.slide_layouts[5])
    
    chart_data = CategoryChartData()
    chart_data.categories = ['East','West','Midwest']
    chart_data.add_series('Series 1',(19.2,21.4,16.7))

    x,y,cx,cy = Inches(2),Inches(2),Inches(6),Inches(4.5)
    slide.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED,x,cy,chart_data
    )

    print(str(idx))

prs.save('test.pptx')

我想知道以前是否有人遇到过这种情况?似乎pptx-python必须在Presentation内部进行查找,从而使每次迭代速度变慢。还是我们使用python循环并将变量加载到内存中的方式?

解决方法

这似乎是图表和幻灯片零件名分配中的O(N ^ 2)行为。此处的GitHub问题线程中有更多详细信息:https://github.com/scanny/python-pptx/issues/644#issuecomment-685056215

,

所以我要做的是,在每次循环迭代中,我都在key中创建新的self.partnames,对应于收到的tmpl之后的/ppt/<something>并递增{{1 }},并不需要每次都遍历所有部件名称并确定1是什么。

next partname is available

我知道它可以进一步改进,只需要一些有关我可能错过的内容的提示即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。