ComException 当试图从 C# 中的 Excel 文件中删除工作表时
ComException When trying to delete a worksheet from an Excel File in C#
我 运行 遇到了一个奇怪的问题,我似乎找不到解决方案。我正在尝试删除包含特定作品sheet 名称的工作簿中的任何作品sheet,但我不断收到此异常:"Unable to get the Delete property of the Worksheet class" 我能够使用该作品[=16] =] class 在其他地方但是当我尝试使用 Delete();方法,甚至是设置所述 sheet 可见性的方法,我得到了同样的结果。任何关于为什么的帮助将不胜感激!
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--;
}
}
原来我必须先激活工作簿和工作表才能删除它。我觉得很傻,并为此道歉!
使用下面的代码而不是直接删除。激活工作簿和工作表。
Microsoft.Office.Interop.Excel.Workbook book = TestBook;
book.Activate();
TestWorksheets[WorkSheetCounter].Activate();
TestWorksheets[WorkSheetCounter].Delete();
我今天早上在处理 XLSX 文件以清除命名引用和宏工作时遇到了类似的问题sheet。尝试 Delete() sheet 时会失败并出现错误:HRESULT 异常:0x800A03EC。发现即使在 Excel 中使用 Document Inspector 也无法删除隐藏的工作 sheet。进一步调查使我发现 sheet 的可见性设置为 VeryHidden。在尝试删除作品之前将可见性更改为 VeryHidden 以外的内容sheet 解决了我的问题。
使用上面的原始示例代码,这是我需要的,以便删除不出错。
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--;
}
}
我 运行 遇到了一个奇怪的问题,我似乎找不到解决方案。我正在尝试删除包含特定作品sheet 名称的工作簿中的任何作品sheet,但我不断收到此异常:"Unable to get the Delete property of the Worksheet class" 我能够使用该作品[=16] =] class 在其他地方但是当我尝试使用 Delete();方法,甚至是设置所述 sheet 可见性的方法,我得到了同样的结果。任何关于为什么的帮助将不胜感激!
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--;
}
}
原来我必须先激活工作簿和工作表才能删除它。我觉得很傻,并为此道歉!
使用下面的代码而不是直接删除。激活工作簿和工作表。
Microsoft.Office.Interop.Excel.Workbook book = TestBook;
book.Activate();
TestWorksheets[WorkSheetCounter].Activate();
TestWorksheets[WorkSheetCounter].Delete();
我今天早上在处理 XLSX 文件以清除命名引用和宏工作时遇到了类似的问题sheet。尝试 Delete() sheet 时会失败并出现错误:HRESULT 异常:0x800A03EC。发现即使在 Excel 中使用 Document Inspector 也无法删除隐藏的工作 sheet。进一步调查使我发现 sheet 的可见性设置为 VeryHidden。在尝试删除作品之前将可见性更改为 VeryHidden 以外的内容sheet 解决了我的问题。
使用上面的原始示例代码,这是我需要的,以便删除不出错。
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--;
}
}