【发布时间】:2018-03-25 15:22:10
【问题描述】:
这很烦人。我创建了一种将工作簿中的所有 Excel 图表复制到 PowerPoint 幻灯片的方法。
public int ImportExcelChartsFromWorkbookToSlides(int startingSlideIndex, string workbookPath, string[] slideTitles, int chartPosTop, int chartPosLeft = 10, int titleWidth = 680, int titleHeight = 20, int titlePosTop = 90, int titlePosLeft = 20, int titleFontSize = 18)
{
int slideIndex = startingSlideIndex;
int titleIndex = 0;
EXCL.Application objExclApp = new EXCL.Application();
EXCL.Workbook objWorkbook = objExclApp.Workbooks.Open(workbookPath, Editable: false);
foreach (EXCL.Worksheet objSheet in objWorkbook.Worksheets)
{
foreach (EXCL.ChartObject objChart in objSheet.ChartObjects())
{
AddBlankSlide(slideIndex);
AddTextBox(titleWidth.ToString(), titleHeight.ToString(), titlePosTop.ToString(), titlePosLeft.ToString());
AddTextBoxParagraph(slideTitles[titleIndex], fontSize: titleFontSize.ToString(), useThemeFont: true);
// Copy Chart from Sheet to Slide
objChart.CopyPicture();
PPT.ShapeRange objShapeRange = objSlide.Shapes.Paste();
objShapeRange.Left = chartPosLeft;
objShapeRange.Top = chartPosTop;
slideIndex++;
titleIndex++;
Marshal.ReleaseComObject(objChart);
Marshal.ReleaseComObject(objShapeRange);
}
Marshal.ReleaseComObject(objSheet);
}
objWorkbook.Close();
objExclApp.Quit();
Marshal.ReleaseComObject(objWorkbook);
Marshal.ReleaseComObject(objExclApp);
objWorkbook = null;
objExclApp = null;
return slideIndex;
}
通常情况下,这在我的机器上运行良好,但有些用户报告了此方法的RPC_E_SERVERFAULT。 (HRESULT: 0x80010105)
此方法中的某个地方导致了问题。要么是这个问题,要么是办公室安装不同的问题,内存问题或导致问题的加载项。我已经在其他几台机器上尝试过这个,但它们仍然可以工作。
【问题讨论】:
标签: c# .net interop office-interop excel-interop