在Excel中删除工作表

时间:2014-07-10 13:44:15

标签: c# excel

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

  

HRESULT的异常:0x800A03EC

带删除()的行上的

。我希望你能帮助我。

这是我当前的代码

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;

5 个答案:

答案 0 :(得分:1)

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

阅读以下内容:

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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();

答案 3 :(得分:0)

试试这个:

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

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

答案 4 :(得分:0)

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

<form id="aproveForm" class="smart-form" novalidate="novalidate">
<form id="mulpayment">

并使用此

this.setState(prevState => ({ item_details:
    {
        ...prevState.item_details,
        [next_item_key]: next_item_value
    }
}));