我在使用pptx模块向已有里面插入table的时候,20页的模板里面只能插入到最后一页,主体代码块如下,最后的保存无论是放在for循环里面还是外面都只能update最后一页的内容,比如我想插入到4-7页,最后只有第七页有更新,请教各位熟悉python的童鞋:
from pptx import Presentation
from pptx.util import Cm, Pt #Inches
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
#df1,df2,df3,df4是结构相同的不同的dataframe,分别要放到模板的4,5,6,7页
list = [df1,df2,df3,df4]
prs = Presentation('new.pptx')
for i in range(1,5):
slide_index = i + 3
df = globals()["df" + str(i)]
globals()["slide" + str(slide_index)] = prs.slides[slide_index]
globals()["shapes" + str(slide_index)] = globals()["slide" + str(slide_index)].shapes
# 表格样式 --------------------
rows = df.shape[0] + 1
cols = df.shape[1]
top = Cm(5)
left = Cm(1) #Inches(2.0)
width = Cm(20) # Inches(6.0)
height = Cm(6) # Inches(0.8)
# 添加表格到幻灯片 --------------------
table = globals()["shapes" + str(slide_index)].add_table(rows, cols, left, top, width, height).table
for row in range(df.shape[0] + 1):
for col in range(0,df.shape[1]):
table.cell(row,col).text = str(df1[df1.columns[col]][row-1])
#prs.save('test_template1.pptx')
prs.save('test_template1.pptx')
如果只是布局不同,数据有变化,你应该考虑使用多母版+占位符的形式自动完成。出现只有最后一页有更新,在于你始终用最后一张幻灯片对象的引用,add_table本质并不是直接添加进幻灯片类,而是加入当前shapes类(该类相当于ps中的图层)。另建议不要用globals(),滥用全局变量会产生不可预知结果。先认识pptx模块类层次关系,多页示例代码如下
下面示例是一个使用了默认母版的,添加5页不同标题幻灯片示例,仅供参考
上述代码演示了创建table,没直接上修改table。之所以这样做是有原因的,详情参见用 pttx 模块批量操作幻灯片