Excel Interop应用图表模板

问题概述:

我为使用C#的“客户端”excel支持(microsoft.office.interop.excel)和EPPlus库自动生成报告(excel)。

我的客户对图表devise不太灵活,所以我的图表必须和他们的图表具有完全相同的风格。

没问题,我使用Excel 2010导出了他们的图表模板

什么不行:

我无法通过代码应用任何图表模板

我曾经尝试过:

1 – EPPlus:不支持将模板加载到图表

2 – InteropExcel:应用模板引发exception失败,这是我的代码:

Application excelApp = null; Workbook workbook = null; Microsoft.Office.Interop.Excel.Worksheet worksheet = null; try { excelApp = new Microsoft.Office.Interop.Excel.Application(); workbook = excelApp.Workbooks.Open(config.DiretorioRelatorio); worksheet = workbook.Sheets[Consts.RECOVERED_SHEET]; string template = config["templatePath"]; // .crtx file ChartObjects charts = worksheet.ChartObjects (); ChartObject chart = ((ChartObject)charts.Item (0)); chart.Chart.ApplyChartTemplate(template); } catch (Exception ex) { Console.WriteLine (ex.Message); } finally { workbook.Save (); workbook.Close (); excelApp.Quit (); ReleaseObject (worksheet); ReleaseObject (workbook); ReleaseObject (excelApp); } 

这段代码要么抛出:

1 – excel interop HRESULT: 0x800A03EC (将ChartObjects [0]转换为ChartObject)

2 – The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)) The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER))

TL:DR:

我怎样才能应用图表模板从文件,我的电子表格上使用C#现有的图表?

编辑:

Pastebin代码: ExcelInteropProblem

VBA中的索引不是基于零的,所以当从.Net到Excel Interop时,即使C#中的索引是从1开始,所以更改这个:

 ChartObject chart = ((ChartObject)charts.Item (0)); 

对此:

 ChartObject chart = ((ChartObject)charts.Item (1));