在Excel Interop.Excel中,为什么PivotField.ShowDetail = false会抛出异常?

时间:2017-01-05 22:43:52

标签: c# excel interop

我有一个试图折叠整个字段的代码。 在foreach循环的最开始(使用Worksheet),它崩溃了陈述

  

抛出异常:CSVDiffUtility.exe中的“System.Runtime.InteropServices.COMException”

     

其他信息:消息过滤器指示应用程序正忙。 (来自HRESULT的异常:0x8001010A(RPC_E_SERVERCALL_RETRYLATER))

做了一些研究并通过添加线程睡眠来解决这个问题。

然而,我仍然遇到

  

抛出异常:mscorlib.dll中的'System.Runtime.InteropServices.COMException'

     

附加信息:来自HRESULT的异常:0x800A03EC

代码点击field.ShowDetail = false;

这有什么理由可以吗?

PS。

此外,尽管我的effor杀死了excel应用程序,但所有异常代码都没有做任何事情。这意味着EXCEL.exe仍然留在任务管理器上。

任何帮助都将不胜感激。

    static void Main(string[] args)
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
        Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();

        try
        {
            Microsoft.Office.Interop.Excel.Workbook interopExcelWorkBook = excelApp.Workbooks.Open(FileDirectoryKeeper.DiffXLSXPath);
            Thread.Sleep(500); // yes this is necessary
            try
            {
                foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in interopExcelWorkBook.Worksheets)
                {
                    foreach (Microsoft.Office.Interop.Excel.PivotTable pivotTable in sheet.PivotTables() as Microsoft.Office.Interop.Excel.PivotTables)
                    {
                        foreach (Microsoft.Office.Interop.Excel.PivotField field in pivotTable.PivotFields() as Microsoft.Office.Interop.Excel.PivotFields)
                        {
                            field.ShowDetail = false;
                        }
                    }
                }

                interopExcelWorkBook.Save();
            }
            catch (Exception e)
            {
                Console.WriteLine("---------------------------");
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
                Console.WriteLine("---------------------------");
            }
            finally
            {
                interopExcelWorkBook.Close(false);
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(interopExcelWorkBook);
                interopExcelWorkBook = null;
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("---------------------------");
            Console.WriteLine(e.Message);
            Console.WriteLine(e.StackTrace);
            Console.WriteLine("---------------------------");
        }
        finally
        {
            excelApp.Quit();
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelApp);
            excelApp = null;
        }
... continues on ...

更新:

我正在跟踪堆栈,看到System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)是造成问题的那个。

0 个答案:

没有答案