C#Excel COM互操作抛出exception“HRESULTexception:0x800A03EC”
范围:
我正在使用epplus和Excel COM Interop来实现自动生成报告。 由于EPPlus无法实现的任务,我发现自己被迫使用Excel COM来覆盖EPPlus中所有缺失的function。
基本上我工作的方式是:
1 – 在我的数据库上执行一个查询
2 – 将结果转储到“base_sheet”(带头文件)
3 – 使用“base_sheets”创build数据透视表。 这总是有效的,因为我一直在使用这个策略很长一段时间。
Interop用法:
整个stream程可以通过仅使用EPPlus来实现(这不会产生任何问题),除了预select数据透视表filter。 (就像下图所示,而不是显示“所有”元素,我只希望那些匹配“PG”,这个filter)。
问题:
Exception from HRESULT: 0x800A03EC
名为Exception from HRESULT: 0x800A03EC
的错误引发了调用有关数据透视表(内置于Excel Interop)的方法。
一些代码示例:
– 样品#1
// Creating Interop Object _excelApp = new Application(); _workbook = _excelApp.Workbooks.Open(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,true); // The last "True" arguments avoids "corruption error"
– 样品#2
// Disposing Object public void Dispose () { _workbook.Save (); _workbook.Close (); _excelApp.Quit (); Marshal.ReleaseComObject (_workbook); }
– 样品#3
// Iterating over worksheet and their pivot tables foreach (Worksheet sheet in _workbook.Sheets) { switch (sheet.Name) { case "ACTDIAXDIA": foreach (PivotTable pivotTable in sheet.PivotTables ()) { pivotTable.PivotCache().MissingItemsLimit = XlPivotTableMissingItems.xlMissingItemsNone; pivotTable.PivotCache().Refresh(); // Settting Pivot Table Outline Layout pivotTable.RowAxisLayout (XlLayoutRowType.xlOutlineRow); // Retrieving Filter instance PivotField pivotField = (PivotField) pivotTable.PageFields ("TIPO_MOVIMENTO"); ToggleFieldVisibility (pivotField, "PG", true); ToggleFieldVisibility (pivotField, "AC", false); ToggleFieldVisibility (pivotField, "AJ", false); ToggleFieldVisibility (pivotField, "RX", false); pivotField = (PivotField)pivotTable.PageFields ("TIPO_COBRANCA"); ToggleFieldVisibility (pivotField, "ACT", true); ToggleFieldVisibility (pivotField, "TC", false); ToggleFieldVisibility (pivotField, "DEMAIS", false); } break; // Code goes on, but its not needed for this demonstration
这是我提出的错误:
// Retrieving Filter instance PivotField pivotField = (PivotField) pivotTable.PageFields ("TIPO_MOVIMENTO");
收盘:
经过在networking上的一些广泛的研究,通过错误信息,我通常会发现它是由于使用基于零的范围,而不是创build“范围”实例时开始“1”,但这不是我的情况,所以我真的不用不知道如何在这里继续。
更新一:
我的Interop Wrapper Class的代码+用法: http : //pastebin.com/B59QvZhf
我不能在这里发布一个示例报告(.xlsx文件),因为它包含敏感数据。
我在用 :
Microsoft.Office.Core版本2.5.0.0
Microsoft.Office.Interop.Excel版本14.0.0.0
Visual Studio 2012和2013 Ultimate