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));