C#Excel COM Interop抛出异常“来自HRESULT的异常:0x800A03EC”

时间:2014-05-22 16:15:07

标签: c# excel office-interop

范围:

我正在使用epplus和Excel COM Interop实现自动生成报告。由于EPPlus无法完成任务,我发现自己被迫使用Excel COM来覆盖EPPlus中所有缺失的功能。

基本上我的工作方式是:

1 - 对我的数据库执行查询

2 - 将结果转储到“base_sheet”(带标题)

3 - 使用“base_sheets”创建数据透视表。这总是有效的,因为我一直在使用这种策略。

互操作用法:

除了预先选择数据透视表过滤器之外,只使用EPPlus可以实现整个流程(这不会给我带来任何问题)。 (就像下面的图像显示的那样,我只想要匹配“PG”,而不是显示“全部”元素。)

Example of Pivot AutoSelected Filter

问题:

调用名为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");

闭合:

经过对网络的一些广泛研究,通过错误信息,我通常发现它是由使用基于零的范围引起的,而不是在创建“范围”实例时以“1”开头,但这不是我的情况,所以我真的不知道怎么去这里。

更新一次:

我的Interop Wrapper类的代码+用法: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

0 个答案:

没有答案