问题标签 [powerpoint-interop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
122 浏览

c# - PowerPoint 互操作:如何检测用户何时关闭 PowerPoint 而不保存更改?

我有一个将 PowerPoint 文件存储在 SQL Server 数据库中的 WPF 应用程序。该应用程序有一个编辑按钮,可以打开给定的 PowerPoint 文件进行编辑。由于 PowerPoint 是基于文件的应用程序,我必须使用临时文件来加载和保存 PowerPoint。

我为此目的编写的辅助类有一个绑定到编辑按钮属性的IsEnabled属性;我们在编辑过程中禁用按钮。在编辑过程中,有一个ManualResetEvent暂停Edit此帮助程序类中的方法。我挂钩 Presentation.Saved 事件以检测用户何时将更改保存到其 PowerPoint。不用说,这一切都是精心策划的。

在测试过程中,我们发现,如果用户在没有保存更改的情况下关闭 PowerPoint,然后对随后的“是否要保存更改”对话框回答“是”, 则在事件执行Presentation.Saved后才会触发,Presentation.CloseFinal我们对此无能为力,为时已晚。 Presentation.CloseFinal是我们从磁盘中检索保存的文件并将其存储到数据库的地方。 Presentation.Saved如果用户单击 PowerPoint 中的“保存”按钮,则立即触发。

为了解决这个问题,我挂钩了PresentationClose事件并编写了以下代码。

然后,我检查我的IsDirty属性Presentation.CloseFinal并将 PowerPoint 保存到数据库中(如果设置为true.

不幸的是,有一个无法预料的皱纹;似乎没有可靠的方法来确定用户是否放弃了他们的更改。此事件第二次触发时,无论用户对“保存您的更改吗?”的回答如何,该Presentation.Saved属性始终设置为。MsoTriState.msoTrue对话。

如果用户放弃更改,PowerPoint Interop 中是否有办法避免将未更改的文件保存到数据库的成本?


作为参考,这里是辅助类的全部内容:

0 投票
0 回答
82 浏览

c# - 使用 Microsoft 互操作库将 ppt 转换为视频的问题

我正在使用 Microsoft 互操作库从 powerpoint 演示文稿创建视频。power point 演示文稿包含内部嵌入的视频和动画。

Interope 库运行良好,当我们在 Visual Studio 中运行应用程序时,我们能够成功创建视频。当我们在 IIS 服务器中部署代码时,视频创建仍然可以成功,但是演示文稿内部嵌入的视频不起作用。

有人对 IIS 和 Visual Studio 的这种行为有任何想法吗? 我们检查了 IIS 中的 Mime 类型和所有扩展名 .mov。.mp4 已经存在

这是代码:

0 投票
1 回答
115 浏览

c# - 使用 C# VSTO 插件获取选定的图表对象或文本框或表格?

我试图为 VSTO 插件获取 PPTX 文件中存在的当前选定对象。

我使用下面的包在幻灯片中创建图表、表格和文本。

我在 Ribben 栏中有一个按钮。一旦用户单击它,我想在任何幻灯片中获取当前选定的对象。我该怎么做呢?interop包里有没有办法。

0 投票
1 回答
74 浏览

c# - 如何使用 C# 和互操作库删除图表轴和线?

我有一个图表,其中包含一些数据。我不想显示 x 和 Y 轴。我以某种方式找到了如何删除图表中的图例。但未能隐藏轴。

在此处输入图像描述

我也只想删除网格线和轴。我有带有以下代码的图表对象。

谁能知道如何用c#隐藏它?

0 投票
1 回答
130 浏览

c# - PowerPoint 互操作:如果完成速度过快,复制粘贴形状会崩溃

Microsoft.Office.Interop.PowerPoint在 C#/.NET 程序中使用它来自动对 PPTX 文件进行一些操作。

我正在尝试使用以下代码在演示文稿中创建现有形状的副本:

但是,该Paste()指令是不可靠的,它有时会起作用,但有时(显然是随机的)会引发以下异常:

错误:System.Runtime.InteropServices.COMException (0x80048240):Shapes(未知成员):无效请求。剪贴板为空或包含可能无法粘贴到此处的数据。在 Microsoft.Office.Interop.PowerPoint.Shapes.Paste()

折腾了一下,上网查了一下,发现问题出在.Copy()指令明显是异步的,基本上返回的时候不能保证shape对象确实已经复制到剪贴板了。事实上,添加一个:

Copy()和之间的Paste()指令解决了这个问题。

但是,睡眠不是一个合适的解决方案,它会大大减慢程序的速度,并且无法知道您是否将睡眠时间设置得太高或太低。

我的问题是:是否有更可靠的方法可以在粘贴之前等待副本“准备好”?

0 投票
1 回答
57 浏览

c# - 如何使用互操作或打开 xml sdk c#为幻灯片添加过渡到 powerpoint

在我的解决方案中,我使用 open xml sdk 和 interop 来处理演示文稿。请告诉我是否可以在他们的帮助下为演示文稿添加幻灯片的过渡?

0 投票
1 回答
82 浏览

c# - 如何配置 IIS 以使用 MS PowerPoint 运行 Asp.Net Core 应用程序

我有一个 Asp.Net Core Web Api 应用程序。我正在使用 Microsoft.Office.Interop.PowerPoint 库来处理演示文稿。

我有一个在指定路径打开演示文稿的代码。在打开之前,我检查文件是否存在于给定目录中:

从 Visual Studio 启动应用程序时,一切正常。但是在将应用程序发布到 iis 网络服务器后,打开演示文稿时出现错误。日志显示该文件存在。但是打开演示文稿时出现错误。错误堆栈:

显然是办公应用程序访问权限的问题。

0 投票
0 回答
12 浏览

c# - power point interop API - TextRange 中的多段无法正常工作

我正在尝试使用互操作 API 生成 pptx 文件,但我需要在一个 TextRange(形状)中组合两个段落,但是我找不到任何关于如何在一个 TextRange 中获取两个段落的具体文档,我的代码如下

但是我只能得到两行而不是两段的结果

  1. 办公室
  2. 2019 视觉工作室 2019
  3. .NET4.7
  4. 赢表格