Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C“Excel COM互操作引发异常”;HRESULT的例外情况:0x800A03EC“;_C#_Excel_Office Interop - Fatal编程技术网

C# C“Excel COM互操作引发异常”;HRESULT的例外情况:0x800A03EC“;

C# C“Excel COM互操作引发异常”;HRESULT的例外情况:0x800A03EC“;,c#,excel,office-interop,C#,Excel,Office Interop,范围: 我正在使用Excel和COM互操作实现自动报告生成。由于有一些任务EPPlus无法完成,我发现自己不得不使用Excel COM来覆盖EPPlus中所有缺失的功能 基本上,我的工作方式是: 1-在我的数据库上执行查询 2-将结果转储到“基本工作表”(带标题) 3-使用“基本工作表”创建数据透视表。这总是有效的,因为我已经使用这个策略很长一段时间了 互操作用法: 除了预先选择透视表过滤器外,整个流程可以通过仅使用EPPlus来实现(这不会给我带来任何问题)。(如下图所示,对于该过滤器,我只需

范围:

我正在使用Excel和COM互操作实现自动报告生成。由于有一些任务EPPlus无法完成,我发现自己不得不使用Excel COM来覆盖EPPlus中所有缺失的功能

基本上,我的工作方式是:

1-在我的数据库上执行查询

2-将结果转储到“基本工作表”(带标题)

3-使用“基本工作表”创建数据透视表。这总是有效的,因为我已经使用这个策略很长一段时间了

互操作用法:

除了预先选择透视表过滤器外,整个流程可以通过仅使用EPPlus来实现(这不会给我带来任何问题)。(如下图所示,对于该过滤器,我只需要匹配“PG”的元素,而不是显示“All”元素)

问题:

调用有关透视表(内置于Excel互操作中)的方法时,引发名为“HRESULT:0x800A03EC的异常”的错误

一些代码示例:

--样本#1

--样本#2

--样本#3

这是引发我错误的一行:

// Retrieving Filter instance
PivotField pivotField = (PivotField) pivotTable.PageFields ("TIPO_MOVIMENTO");
结束:

在网络上做了一些广泛的研究之后,通过错误消息,我通常发现这是由使用基于零的范围造成的,而不是在创建“范围”实例时以“1”开头,但这不是我的情况,所以我真的不知道如何在这里继续

更新一个:

我的互操作包装类的代码+用法:

我不能在这里发布示例报告(.xlsx文件),因为它包含敏感数据

我正在使用:

Microsoft.Office.Core版本2.5.0.0

Microsoft.Office.Interop.Excel版本14.0.0.0


Visual Studio 2012和2013 Ultimate

是否可以尝试使用类似的内容更改.Open方法调用,并查看它是否可能是一个
转换
问题
var\u workbook=excelApp.Workbooks.Open(filePath,0,true,5,emptStr,emptStr,true,XlPlatform.xlWindows,“\t”,false,false,0,true,1,0)EmpStr=String.Empty?我现在正在尝试,很快会让你知道。这是一个糟糕的内部Excel错误。当你查询“excel错误1004”时,你会在谷歌上得到一百万次点击,最好从顶部开始。@DJKRAZE现在我也遇到了同样的错误,但正好在.Open行。有什么想法吗?取决于您如何声明文件路径
// Disposing Object
public void Dispose ()
    {
        _workbook.Save  ();
        _workbook.Close ();
        _excelApp.Quit  ();
        Marshal.ReleaseComObject (_workbook);
    }
// 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");