【问题标题】:Export a 'PPTX' format file to 'SVG' format files using VBA in the PowerPoint Application在 PowerPoint 应用程序中使用 VBA 将“PPTX”格式文件导出为“SVG”格式文件
【发布时间】:2020-04-04 08:38:11
【问题描述】:

一个'pptx'格式的文件应该可以在最新版本的PowerPoint中导出到一个'svg'文件或一些'svg'文件(一张幻灯片到一个'svg'文件)(该功能是在2019 年 9 月),我可以在 PowerPoint 应用程序中完成。但是我不能用 PowerPoint 应用程序中的 VBA 来做到这一点,但是我可以在 PowerPoint 应用程序中使用 VBA 将“pptx”格式文件导出为“png”或“jpg”或其他格式文件。VBA 中的代码是:

Sub test()

With Application.ActivePresentation.Slides(1)
    .Export "c:\Graphic\Slide1", "svg"
End With

End Sub

我得到了这个错误:

PowerPoint 无法导出幻灯片,因为没有安装转换器 支持这种文件类型。

其实我想做的是通过python导出文件(使用pywin32模块),代码是:

from win32com import client as wc
ppt = wc.Dispatch('PowerPoint.Application')
doc = ppt.Presentations.Open(path)
doc.Slides(1).Export(file_path, 'svg')

我得到了同样的错误:

Slide.Export : PowerPoint 无法导出幻灯片,因为没有 已安装的转换器支持此文件类型。

代码真的没问题,因为如果我将 'svg' 更改为 'png' 或 'jpg' 就可以了。

2020-08-26 附加部分

我已将 PowerPoint 更新到最新版本,并使用 pywin32 中的 makepy.py 从 Microsoft PowerPoint 16.0 Object Library(2.c) 创建一个名为 91493440-5A91-11CF-8700-00AA0060263Bx0x2x12.py 的新 py 文件,我比较了旧文件和新文件,它们确实有一些差异,请参见图片the difference between the new file and the old,但在“形状导出”方面它们似乎相同,请参见图片ppShapeFormat。无论如何,我已经尝试了以下代码:

doc.Slides(1).Shapes('Rectangle 3').Export(file_path, i)

“i”我试过-5到20,但只有0-5有所不同,其他导出的文件与i = 1相同(即JPG文件),我查看了所有文件, 都是二进制文件,不能是 SVG 文件,请问如何将 Shapes 导出为 SVG?

顺便说一下,我也直接在VBA中尝试过,结果是一样的。

如果图片无法显示,这里有一些关键信息:

    ppShapeFormatBMP              =3          # from enum PpShapeFormat
    ppShapeFormatEMF              =5          # from enum PpShapeFormat
    ppShapeFormatGIF              =0          # from enum PpShapeFormat
    ppShapeFormatJPG              =1          # from enum PpShapeFormat
    ppShapeFormatPNG              =2          # from enum PpShapeFormat
    ppShapeFormatWMF              =4          # from enum PpShapeFormat

【问题讨论】:

    标签: vba svg export powerpoint pywin32


    【解决方案1】:

    SVG 是 PowerPoint 中相对较新的格式,尚未添加到对象模型中。

    作为一种解决方法,您可以导出为 EMF。与 SVG 一样,它是一种矢量格式。然后使用InkScape 转换为 SVG,它是免费且可编写脚本的。

    【讨论】:

    • 谢谢你的回答,对我很有帮助,我已经解决了95%以上的问题,但还剩下5%。有些是这样的:(下面我只是将 PowerPoint 导出的 SVG 称为“A”,而从 EMF 转换的 SVG 称为“B”) 1. B 通常比 A 大三倍,这有时会导致一些性能问题。 2.渐变填充等一些效果在B中可能会丢失,但在A中很好。所以我想问一下SVG格式什么时候会添加到对象模型中,我怎么知道它已经,例如,也许从 Office 更新日志或其他一些方式。对了,我不能在评论里改行吗?
    • 您已经可以将形状导出为 SVG,但可能需要一段时间才能以该格式导出整个幻灯片。 Microsoft 很少宣布添加 VBA 对象模型。
    • 请参阅问题中的“2020-08-26 附加部分”。
    • 正如 JohnK 所提到的,您不能使用对象模型来做不属于对象模型的事情,而且目前还没有 SVG 导出,而且微软没有说明何时(或如果)它会的。
    • @SteveRindsberg 你回复了什么吗?在我的页面中,我可以看到一个“显示更多评论”链接,但是当我点击它时,什么都不会改变。好的,好的,当我添加这条新评论时,我可以看到你最后的回复,谢谢,你不再需要回复这条评论了。
    猜你喜欢
    • 2016-12-04
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    相关资源
    最近更新 更多