我正在尝试使用 Python 获取幻灯片文件的每张幻灯片的标题。我在 Python 中使用 Presentation 包,但找不到任何指定标题的内容。我有这段代码可以返回powerpoint文件的内容。但我需要指定标题。
from pptx import Presentation
prs = Presentation("pp.pptx")
# text_runs will be populated with a list of strings,
# one for each text run in presentation
text_runs = []
for slide in prs.slides:
for shape in slide.shapes:
if not shape.has_text_frame:
continue
for paragraph in shape.text_frame.paragraphs:
for run in paragraph.runs:
text_runs.append(run.text)
Run Code Online (Sandbox Code Playgroud) 有没有办法使用 python-pptx 在 powerpoint 演示文稿中绘制 matplotlib 图形,而不将图形保存为 *.jpg 或 *.png ?下面是一种简单的方法,即将 matplotlib 图保存为图像文件,然后将其加载到 python-pptx 中,但这根本不是有效的方法。
import numpy as np
import matplotlib.pyplot as plt
from pptx import Presentation
from pptx.util import Inches
np.random.seed(5)
x = np.arange(1, 101)
y = 20 + 3 * x + np.random.normal(0, 60, 100)
plt.plot(x, y, "o")
plt.plot([70, 70], [100, 250], 'k-', lw=2)
plt.plot([70, 90], [90, 200], 'k-')
plt.show()
plt.savefig('graph.jpg')
img = 'graph.jpg'
prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
pic = slide.shapes.add_picture(img, Inches(1), Inches(1), …Run Code Online (Sandbox Code Playgroud) 作为对我之前的问题的回答,我编写了以下简短程序来尝试重现该问题。
from pptx import Presentation
from io import BytesIO
p = Presentation()
slide = p.slides.add_slide(p.slide_layouts[0])
slide.shapes[0].text = 'asdf'
p.save('test.pptx')
out = BytesIO()
p.save(out)
out_file = open('bytes_test.pptx', 'wb', buffering=0)
out_file.write(out.read())
out_file.close()
Run Code Online (Sandbox Code Playgroud)
这产生了两个pptx文件。
第一个是test.pptx,它包含一个带有“标题幻灯片”布局的幻灯片,并包含字符串“ asdf”。文件大小为28 KB。
第二个,bytes_test.pptx,在PowerPoint中打开时,仅显示一个大灰色框,上面显示“单击以添加第一张幻灯片”。文件大小为0。
在Windows 10上使用Anaconda Python 3.6.1和python-pptx 0.6.6运行
为什么会这样?
我想使用 python-pptx 模块来更改给定 powerpoint 演示文稿中每个包含文本的形状的校对语言。不幸的是我没有做到。:(
我正在使用 Python 3.6.3 和 python-pptx 0.6.7。
我的代码如下所示:
from pptx import Presentation
from pptx.enum.lang import MSO_LANGUAGE_ID
# In this example code, all proofing language is set to ENGLISH_UK
# all languages can be found in the docs for python-pptx
new_language = MSO_LANGUAGE_ID.ENGLISH_UK
input_file = 'test_pptx.pptx'
output_file = input_file[:-5] + '_modified.pptx'
# Open the presentation
prs = Presentation(input_file)
# iterate through all slides
for slide_no, slide in enumerate(prs.slides):
# iterate through all shapes/objects on one slide
for …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建数千个 Powerpoint 演示文稿。我正在使用 python pptx 来实现这一点。到目前为止一切顺利,但我不喜欢默认的 4:3 幻灯片大小。我可以创建模板幻灯片(具有幻灯片大小和默认图标的自定义格式)并在我创建的所有幻灯片中使用它吗?
如果是,有人可以帮助我完成这个过程吗?一般我用
blank_slide_layout = prs.slide_layouts[6]
Slide = prs.slides.add_slide(blank_slide_layout)
Run Code Online (Sandbox Code Playgroud)
希望他们能够成为使用prs.Slides.add_slide(custom_template_1)访问保存的模板的方法
提前致谢
我正在尝试将幻灯片从一个演示文稿复制到另一个演示文稿,但返回错误:
追溯(最近一次通话):
Run Code Online (Sandbox Code Playgroud)File "C:\Users\vuse1\documents\visual studio 2015\Projects\PythonApplication\PythonApplication\PythonApplication.py", line 8, in prs2.slides.add_slide(copySlide) File "C:\Python27\lib\site-packages\pptx\slide.py", line 287, in add_slide slide.shapes.clone_layout_placeholders(slide_layout) File "C:\Python27\lib\site-packages\pptx\shapes\shapetree.py", line 515, in clone_layout_placeholders for placeholder in slide_layout.iter_cloneable_placeholders(): AttributeError: 'Slide' object has no attribute 'iter_cloneable_placeholders'
from pptx import Presentation
prs1 = Presentation("C:\\Users\\vuse1\Desktop\\first.pptx")
prs2 = Presentation("C:\\Users\\vuse1\Desktop\\second.pptx")
copySlide=prs1.slides[0]
prs2.slides.add_slide(copySlide)
prs2.save("C:\\Users\\vuse1\Desktop\\second.pptx")
Run Code Online (Sandbox Code Playgroud) 我正在尝试合并幻灯片,但我不知道该怎么做。我发现了一个看起来很有前途的 python moduel pptx。我尝试将幻灯片内容从 2 个幻灯片复制到一个新的幻灯片。但我遇到了很多问题,比如如何获取现有的幻灯片布局或形状(所有形状,包括图片、自动形状等)的高度、宽度、位置。我查看了Python-pptx上的python-pptx示例:复制幻灯片。我尝试做类似的事情,但这不起作用。
这是我的代码:
from pptx import Presentation
prs1 = Presentation("C:/Users/number/Documents/Test1.pptx")
prs2 = Presentation("C:/Users/number/Documents/Test2.pptx")
slidelst = []
for layout in prs2.slide_layouts:
slidelst.append(prs1.slides.add_slide(layout))
index = 0
for slide in slidelst:
for shape in prs2.slides[prs2.slides.index(slide)].shapes:
slide.shapes._spTree.insert_element_before(shape.element, 'p:extLst')
index+=1
prs1.save("C:/Users/I505168/Documents/newpresentation.pptx")
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Traceback (most recent call last):
File "C:\Users\I505168\Desktop\testpptx.py", line 12, in <module>
for shape in prs2.slides[prs2.slides.index(slide)].shapes:
File "C:\Users\I505168\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pptx\slide.py", line 315, in index
raise ValueError("%s is not in slide collection" % slide)
ValueError: <pptx.slide.Slide object at 0x03B53A50> is not …Run Code Online (Sandbox Code Playgroud) 我的最终目标是改变演示文稿的主题。为此,我创建了一个源模板和一个新模板(具有正确的主题)。我迭代源模板中的每张幻灯片,然后使用/sf/answers/3925225601/中的代码将包含源内容的新幻灯片添加到新模板中。如果有更好的方法来做到这一点,我很想听听。
这对于文本和文本框非常有用,但是测试图像无法在新的 powerpoint 中显示(如下图所示):
def copy_slide_from_external_prs(self, src, idx, newPrs):
# specify the slide you want to copy the contents from
src_slide = src.slides[idx]
# Define the layout you want to use from your generated pptx
slide_layout = newPrs.slide_layouts[2]
# create now slide, to copy contents to
curr_slide = newPrs.slides.add_slide(slide_layout)
# remove placeholders
for p in [s.element for s in curr_slide.shapes if 'Text Placeholder' in s.name or 'Title' in s.name]:
p.getparent().remove(p)
# now copy contents from external slide, …Run Code Online (Sandbox Code Playgroud) 我编写了一个 python 脚本,使用 pywin32 将 ppt 转换为视频,该脚本工作正常,但是当我尝试在 Ubuntu 环境中导入我的脚本时,pywin32 无法作为其 Windows 支持的模块工作。所以我想找到一些可以在Ubuntu环境中使用python将ppt转换为视频的东西。
这些是在 Windows 中运行良好的脚本。
import win32com.client
import time
import os
ppSaveAsWMV = 37
def cover_ppt_to_wmv(ppt_src,wmv_target):
ppt = win32com.client.Dispatch('PowerPoint.Application')
presentation = ppt.Presentations.Open(ppt_src,WithWindow=False)
presentation.CreateVideo(wmv_target,-1,4,720,24,60)
start_time_stamp = time.time()
while True:
time.sleep(4)
try:
os.rename(wmv_target,wmv_target)
print('success')
break
except Exception:
pass
end_time_stamp=time.time()
print(end_time_stamp-start_time_stamp)
ppt.Quit()
pass
if __name__ == '__main__':
cover_ppt_to_wmv('','')
Run Code Online (Sandbox Code Playgroud) I try to open a .pptx from Amazon S3 and read it using the python-pptx library. This is the code:
from pptx import Presentation
import boto3
s3 = boto3.resource('s3')
obj=s3.Object('bucket','key')
body = obj.get()['Body']
prs=Presentation((body))
Run Code Online (Sandbox Code Playgroud)
It gives "AttributeError: 'StreamingBody' object has no attribute 'seek'". Shouldn't this work? How can I fix this? I also tried using read() on body first. Is there a solution without actually downloading the file?
python-pptx ×10
python ×7
powerpoint ×2
amazon-s3 ×1
boto3 ×1
matplotlib ×1
python-2.7 ×1
python-3.x ×1
ubuntu ×1