- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 excel 文件,其中包含一系列格式化图表,位于名为 Charts
的选项卡上。我已将图表命名为 Figure1
、Figure2
、Figure3
等。
我有一个现有的 PowerPoint 模板。该模板每张幻灯片有 2 个占位符(因此每张幻灯片可以容纳 2 个图表)。
我想将 Figure1
粘贴到幻灯片 3 的左侧占位符中,将 Figure2
粘贴到幻灯片 3 的右侧占位符中。我想在 python 中执行此操作,因为数据分析在python中完成,excel用于与同事共享存储结果。
尝试 1:
尝试 1 使用 win32com.client
。我正在关注这个例子:How to copy chart from excel and paste it as chart into powerpoint (not image) using python
但我无法获得将图表插入占位符的正确语法。当我遵循解决方案中的语法时,没有任何反应,我收到一条消息
<bound method Paste of <COMObject >>
当前代码:
xlApp = win32.Dispatch('Excel.Application')
wb = xlApp.Workbooks.Open(outputPath+'Chart Pack.xlsb')
pptApp = win32.Dispatch('PowerPoint.Application')
ppt = pptApp.Presentations.Open(template)
# attempt 1
wb.sheets('Charts').ChartObjects('Figure1').Copy
ppt.slides[2].Shapes.Paste
# attempt 2
wb.sheets('Charts').ChartObjects('Figure1').Copy
ppt.slides[2].placeholders[1].Paste
尝试 2:
尝试 2 使用 python-pptx
。我在这里查看了文档: https://python-pptx.readthedocs.io/en/latest/user/placeholders-using.html
但该示例涉及在 PowerPoint 中从头开始创建 excel 图表(我不确定您为什么要这样做),而且我无法弄清楚从 excel 插入现有图表的语法。
当前代码:
from pptx import Presentation
xlApp = win32.Dispatch('Excel.Application')
wb = xlApp.Workbooks.Open(outputPath+'Chart Pack.xlsb')
prs = Presentation(template)
slide = prs.slides[3]
for shape in slide.placeholders:
print('%d %s' % (shape.placeholder_format.idx, shape.name))
placeholder = prs.slides[3].placeholders[1]
placeholder.name
placeholder.placeholder_format.type
placeholder.insert_chart(wb.sheets('Charts').ChartObjects('Figure1').Copy)
要求:
我想将 excel 图表粘贴为 excel 对象(而不是图片),因为我的同事希望能够单击数据系列以获取基础值等。
我想将图表粘贴到一个占位符内(而不是在它上面)。
我不想像大多数示例那样在 PowerPoint 中生成新图表。一位同事准备了一个 excel 仪表板并根据需要格式化了一些图表,从头开始做这一切会很费力。
我不想在 VBA 中执行此操作。我想在 python 中完成它,因为它是更广泛程序的一部分。
我不想使用 plotnine
、seaborn
、matplotlib
等。根据 1,我的同事喜欢他可以单击以显示基础值的 excel 对象。这不能在这些程序中完成。
Python 应该可以做到这一点。有什么想法吗?
最佳答案
你非常接近! Copy
和 Paste
是方法,所以要调用它们需要在它们后面加上括号,例如复制()
。
要获取幻灯片2,需要使用Slides
类的Item
方法:ppt.Slides.Item(2)
import win32com.client as win32
xlApp = win32.Dispatch('Excel.Application')
wb = xlApp.Workbooks.Open(outputPath+'Chart Pack.xlsb')
pptApp = win32.Dispatch('PowerPoint.Application')
ppt = pptApp.Presentations.Open(template)
slide_num = 3
LEFT_PLACEHOLDER = 3
RIGHT_PLACEHOLDER = 2
# Figure1
window.View.GotoSlide(slide_num)
wb.sheets('Charts').ChartObjects('Figure1').Copy()
ppt.Slides.Item(slide_num).Shapes.Paste().Select()
window.Selection.Cut()
ppt.Slides.Item(slide_num).Shapes(LEFT_PLACEHOLDER).Select()
window.View.Paste()
# Figure2
window.View.GotoSlide(slide_num)
wb.sheets('Charts').ChartObjects('Figure2').Copy()
ppt.Slides.Item(slide_num).Shapes.Paste().Select()
window.Selection.Cut()
ppt.Slides.Item(slide_num).Shapes(RIGHT_PLACEHOLDER).Select()
window.View.Paste()
编辑:在尝试实现此 answer 中的解决方案后,我能够将图表直接粘贴到占位符中。 .这有点 hacky,但它确实有效。
关于python - 如何使用 Python 将 Excel 图表粘贴到 PowerPoint 占位符中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71031183/
我的 DateTime 对象使用 DateTime.Now 分配了本地时间。我想知道一旦夏令时开始/结束,这个对象是否会给出正确的当前本地时间。或者我需要解决方法吗? 最佳答案 是的,DateTime
假设我需要“特定类别中可用的项目数量”与“所有项目的数量”的比率。请考虑这样的 MySQL 表: /* mysql> select * from Item; +----+------------+--
我有这张 table http://codepen.io/MetCastle/pen/lxceL我想使用 jQuery 根据 input type="number" 隐藏/显示列。表示整个列: Pro
想要制作一个看起来像这样的网格,其中 div/section 以百分比表示。 margin 在任何地方都是一样的。 http://www.ladda-upp.se/bilder/giefekcmgwm
这将返回 1(又名 TRUE) SELECT DATE_SUB(NOW(), INTERVAL 24*100 HOUR) = DATE_SUB(NOW(), INTERVAL 100 DAY); 10
我一直在尝试在 UIScrollView 中获取 UIView 的转换后的 CGRect。如果我不放大它就可以正常工作,但是一旦我放大,新的 CGRect 就会发生变化。这是让我接近的代码: CGFl
对于家庭作业,我需要在不使用内置模 (%) 运算符的情况下返回 num1 除以 num2 后的余数。我能够通过以下代码让大多数测试通过,但我仍然坚持如何解释给定数字的 -/+ 符号。我需要保留 num
我用 Javascript 创建了一个倒数计时器;它是成功的,期望未完成。事实上,从数学上讲,它是正确的,但是谷歌浏览器的浏览器设置“暂停”(因为没有更好的术语)SetInterval/Timeout
我有两个 的,每个都设置为其容器宽度的 45%。有没有办法使 居中?使得它们在容器的左右两侧有相同的空间,并且它们之间也有空间。 一开始我只是做了每个 50% 并且有 padding: 0px 2
我是一名优秀的程序员,十分优秀!