【问题标题】:Deleting a sheet in Excel在 Excel 中删除工作表
【发布时间】:2017-09-07 19:21:34
【问题描述】:

我尝试了几乎所有可以在 StackOverflow 上找到的东西,但我的代码不断抛出以下错误:

HRESULT 异常:0x800A03EC

与delete()就行了。我希望你们能帮助我。

这是我当前的代码

var xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook book =
xlApp.Workbooks.Open(File_name);
xlApp.DisplayAlerts = false;
Excel.Worksheet worksheet = (Excel.Worksheet)book.Worksheets[2];
worksheet.Delete();
book.Worksheets.Add();
xlApp.DisplayAlerts = true;
book.Save();
book.Close();
xlApp.Quit();
Marshal.ReleaseComObject(worksheet);
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(xlApp);

这是我尝试过的其他代码:

oXL.DisplayAlerts = false;
worksheet = (Excel.Worksheet)theWorkbook.Sheets[i];
((Excel.Worksheet)theWorkbook.Sheets[i]).Delete();
oXL.DisplayAlerts = true;
oWB.Save();
oWB.Close(false, missing, missing);
oSheet = null;
oWB = null;
oXL.Quit();

还有一些变化

Microsoft.Office.Interop.Excel.Application oXL = new Microsoft.Office.Interop.Excel.Application();
Excel.Workbook oWB;
Excel.Worksheet oSheet;
Excel.Workbooks oMWB;

我正在使用这个参考:

using Excel = Microsoft.Office.Interop.Excel;

【问题讨论】:

  • HRESULT 异常:0x800A03EC
  • 哪一行给出了错误?进行实际删除?您是否已调试并确保所有对象都已初始化并且您期望什么?你确定工作表存在吗?此外,有时还有隐藏的工作表,比如保存 print_area 的工作表。通过索引引用工作表是可能的,您实际上是在尝试删除无法删除的特殊工作表。索引 2 处的工作表名称是什么?
  • 在第一个例子中这一行:worksheet.Delete();在第二个:((Excel.Worksheet)theWorkbook.Sheets[i]).Delete();
  • 我更新了我的评论。请参阅我的其他问题。
  • 我调试了多次,对象被初始化,工作表确实存在。床单也没有隐藏。工作表的名称是“sheet2”

标签: c# excel


【解决方案1】:

使用 Excel 互操作库时,我多次遇到此错误。大多数情况下,此问题(一般 COM 异常)的主要原因是 Excel 试图找到您要求的内容,但 Excel 无法找到它。看到这个answer,它对我帮助很大。

阅读这些行:

Excel.Worksheet worksheet = (Excel.Worksheet)book.Worksheets[2];
worksheet.Delete();

我认为您正在尝试删除一个不存在的工作表。检查您的 Excel 文档。

【讨论】:

    【解决方案2】:

    我刚刚犯了一个最愚蠢的错误.....excel文件是共享文件,这就是为什么我不能删除它..

    抱歉犯了这么愚蠢的错误,感谢所有试图帮助我的人!

    【讨论】:

    • 哈哈我自己也遇到过这种情况...考虑将您的问题标记为版主注意并尝试将其删除,因为它不太可能帮助未来的访问者:p
    【解决方案3】:

    HRESULT: 0x800A03EC 是未知的 COM 错误。这通常发生在 Excel 因您的输入或参数错误而引发错误时。

    本例提供msdn:Programmatically Deleting Worksheets from Workbooks

    ((Excel.Worksheet)this.Application.ActiveWorkbook.Sheets[4]).Delete();
    

    那么接下来试试:

    Excel.Worksheet worksheet = (Excel.Worksheet)book.Sheets[2];
    worksheet.Delete();
    

    代替:

    Excel.Worksheet worksheet = (Excel.Worksheet)book.Worksheets[2];
    worksheet.Delete();
    

    【讨论】:

      【解决方案4】:

      试试这个:

      xlApp.DisplayAlerts = false;
      Excel.Worksheet worksheet = (Excel.Worksheet)book.Worksheets[2];
      worksheet.Delete();
      xlApp.DisplayAlerts = true;
      

      同样重要的是要记住,互操作从 1 开始计数,而不是从 0 开始计数。因此删除项目 [0] 或删除唯一的工作表会引发异常。如果您打算删除 [2] 工作表,则第三个将取而代之。所以一定要从最后一个到第一个删除。

      【讨论】:

        【解决方案5】:

        这是我用来删除excel表格的代码

         Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
        
                        if (xlApp == null)
                        {
                            return;
                        }
        
                        xlApp.DisplayAlerts = false;
                        string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
                                                + "\\Sample.xlsx";
                        Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
                        Excel.Sheets worksheets = xlWorkBook.Worksheets;
        
                        worksheets[4].Delete();
                        worksheets[3].Delete();
                        xlWorkBook.Save();
                        xlWorkBook.Close();
        
                        releaseObject(worksheets);
                        releaseObject(xlWorkBook);
                        releaseObject(xlApp);
        

        并使用它

        static void releaseObject(object obj)
                {
                    try
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                        obj = null;
                    }
                    catch (Exception ex)
                    {
                        obj = null;
                        throw ex;
        
                    }
                    finally
                    {
                        GC.Collect();
                    }
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-04
          • 1970-01-01
          • 1970-01-01
          • 2017-07-24
          • 2010-10-15
          • 2014-05-15
          • 1970-01-01
          • 2016-03-17
          相关资源
          最近更新 更多