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