如何解决使用 office.interop 在 C# 中生成 PowerPoint 演示图表的问题
我正在从事一个小型 C#
项目,该项目从 PowerPoint
数据创建一个 Jira
演示文稿。该程序运行良好,直到大约 2 周前发生了一个新错误(这次没有对编码进行任何更改)。
我正在做的是:我有一个带有饼图的 PowerPoint
模板。我想在我的程序中编辑饼图的数据,最后我将演示文稿保存为用户指定的文件夹中的新演示文稿。
出现的错误如下: PPT 演示中数据显示正确,模具饼图也能正常工作。但是,如果您右击饼图并选择“编辑数据”,模具图将重置为模板文件中指定的值(名称被重置并且值也更改为“1”,就像在我的模板中一样)。这显然是一种新行为(自 2 周前以来从未发生过)。
我用来编辑饼图后面数据的代码如下所示:
// using this libraries to acces powerpoint / excel:
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Excel = Microsoft.Office.Interop.Excel;
PPTPres.Slides[DiagrammPos[0]].Shapes[DiagrammPos[1]].Chart.ChartData.Activate();
Excel.Workbook ExcelWB = (Excel.Workbook)PPTPres.Slides[DiagrammPos[0]].Shapes[DiagrammPos[1]].Chart.ChartData.Workbook;
Excel.Application ExcelApp = ExcelWB.Application;
ExcelApp.Visible = false;
Excel.Worksheet DiagData = (Excel.Worksheet)ExcelWB.Worksheets[1];
// example how DiagData is used in the programm:
DiagData.Cells[Count,1].Value = FileSet.GetName();
DiagData.Cells[Count,2].Value = TimeTotal;
我尝试手动保存 excel 工作簿 - 像这样的对象,但如果我尝试这样做,则会出现异常:
try
{
ExcelWB.Save();
} catch (Exception e)
{
Console.WriteLine(e.Message);
}
异常是 HRESULT:0x800A03EC - 异常。它看起来像这样:
作为参考,以下是 PowerPoint
演示文稿中行为的一些屏幕截图:
我的程序运行后的图(一切看起来都不错):
该选项的屏幕截图,它会破坏一切:
重置图表截图:
有没有办法防止饼图被重置?
编辑: 我尝试了多种方法,但没有任何效果:
- 完成所有更改后刷新图表。
- 使用
ExcelWB - Object
方法关闭.close()
- 更改模板(如果我这样做,它会重置为更改后的模板)
- 在将 PPT 保存为新演示文稿之前保存更改的模板(仍会重置所有内容)
我真的被这个问题困住了。
解决方法
我找到了自己解决这个问题的方法:
我的第一个想法(保存 Excel
文件)似乎是正确的猜测。但是,.save()
方法不起作用(抛出异常)。
诀窍是:您可以使用另一种工作正常的方法保存,关闭excel文件的方法有一个布尔值,如果设置为true,则保存所有更改。 我需要做的就是在我的文件中添加以下内容:
ExcelWB.Close(true);
谢谢 mirco 你的解决方案有效,我几天前发布了同样的问题: Powerpoint chart data not saved
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。