c#中试图从Excel文件中删除工作表时发生的异常

本文关键字:异常 工作 删除 Excel 文件 | 更新日期: 2023-09-27 18:11:42

我遇到了一个奇怪的问题,我似乎找不到解决方案。我试图删除工作簿中包含某个工作表名称的任何工作表,我一直得到这个例外:"无法获得工作表类的删除属性"我能够在其他地方使用工作表类,但当我尝试使用delete ();方法,甚至是设置表单可见性的方法,我都得到了相同的结果。任何帮助,为什么会感激!

Microsoft.Office.Interop.Excel.Sheets TestWorksheets = TestBook.Worksheets;
if (TestWorksheets.Count > NumberofsheetsIWantToKeep)
{
   int WorkSheetCounter = TestWorksheets.Count;
   while (WorkSheetCounter > NumberofsheetsIWantToKeep)
   {
      if(TestWorksheets[WorkSheetCounter].Name.Contains("blah"))
      {
        TestWorksheets[WorkSheetCounter].Delete();
      }
      WorkSheetCounter--;
   }
}

c#中试图从Excel文件中删除工作表时发生的异常

原来我必须激活工作簿和工作表才能删除它。我觉得自己很傻,为此道歉!

使用下面的代码而不是直接删除。激活工作簿和工作表

   Microsoft.Office.Interop.Excel.Workbook book = TestBook;
   book.Activate();
   TestWorksheets[WorkSheetCounter].Activate();
   TestWorksheets[WorkSheetCounter].Delete();

我今天早上在处理XLSX文件以清除命名引用和宏工作表时遇到了类似的问题。当尝试Delete()表时,它将失败,错误:Exception from HRESULT: 0x800A03EC。发现即使在Excel中使用文档检查器也无法删除隐藏的工作表。进一步的调查让我发现床单的可见性被设置为VeryHidden。在试图删除工作表之前,将可见性更改为除VeryHidden之外的其他内容解决了我的问题。

使用上面的原始示例代码,这是我需要让删除不出错。

Microsoft.Office.Interop.Excel.Sheets TestWorksheets = TestBook.Worksheets;
if (TestWorksheets.Count > NumberofsheetsIWantToKeep)
{
    int WorkSheetCounter = TestWorksheets.Count;
    while (WorkSheetCounter > NumberofsheetsIWantToKeep)
    {
        if(TestWorksheets[WorkSheetCounter].Name.Contains("blah"))
        {
            if(TestWorksheets[WorkSheetCounter].Visible == Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetVeryHidden)
            { TestWorksheets[WorkSheetCounter].Visible = Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetHidden; }
            TestWorksheets[WorkSheetCounter].Delete();
        }
        WorkSheetCounter--;
    }
}