本文介绍了在带有office.interop的C#中生成PowerPoint演示文稿图表时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一个小的C#项目,它从Jira数据创建PowerPoint演示文稿。该程序运行正常,直到大约2周前出现新错误(此时未更改代码)。

我具体要做的是:我有一个带有饼图的PowerPoint模板。我要在程序中编辑饼图的数据,最后将演示文稿另存为用户指定的文件夹中的新演示文稿。

出现的错误如下:数据在PPT演示文稿中正确显示,模饼图也可以工作。但是,如果右键单击饼图并选择&q;编辑数据&q;,则图表将重置为模板文件中指定的值(名称将重置,值也会更改为&q;1&q;,就像在我的模板中一样)。这是一种明显的新行为(自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演示文稿中的一些行为截图以供参考:

程序运行后的图表(一切正常):

销毁所有内容的选项屏幕快照:

重置图表截图:

有没有办法防止重置饼图?

编辑:我尝试了多种方法,但都没有结果:

  • 在完成所有更改后刷新Diagramm。
  • 使用.close()方法关闭ExcelWB - Object
  • 更改模板(如果我这样做,它将重置为更改后的模板)
  • 在将PPT另存为新演示文稿之前保存更改的模板(仍会重置所有内容)

我真的被这个问题困住了。

推荐答案

我发现了如何自己解决此问题:

我的第一个想法(保存Excel文件)似乎是正确的猜测。但是,.save()方法不起作用(引发异常)。

诀窍是:您可以使用另一个工作正常的方法保存,关闭Excel文件的方法有一个布尔值,如果设置为true,则保存所有更改。我需要做的就是在我的文件中添加以下内容:

ExcelWB.Close(true);

这篇关于在带有office.interop的C#中生成PowerPoint演示文稿图表时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-17 20:35