C# 在Excel中删除工作表

C# 在Excel中删除工作表,c#,excel,C#,Excel,我尝试了在StackOverflow上找到的几乎所有方法,但我的代码不断抛出以下错误: 来自HRESULT的异常:0x800A03EC 在带有delete()的行中。我希望你们能帮我 这是我目前的密码 var xlApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook book = xlApp.Workbooks.Open(File_name); xlApp.D

我尝试了在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是未知的COM错误。当Excel因为输入或参数错误而抛出错误时,通常会发生这种情况

此示例提供了msdn:

所以请尝试下一步:

Excel.Worksheet worksheet = (Excel.Worksheet)book.Sheets[2];
worksheet.Delete();
而不是:

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

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

读这些句子:

Excel.Worksheet worksheet = (Excel.Worksheet)book.Worksheets[2];
worksheet.Delete();
我认为您试图删除一个不存在的工作表。检查您的Excel文档。

尝试以下操作:

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

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

我刚刚犯了有史以来最愚蠢的错误。。。。。excel文件是一个共享文件,这就是我无法删除它的原因


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

这是我用来删除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();
            }
        }

HRESULT异常:0x800A03EC哪一行显示错误?实际删除吗?您是否已调试并确保所有对象都已初始化,以及您期望的结果?你确定这张表存在吗?此外,有时也会有隐藏的纸张,比如那些保存打印区域的纸张。通过索引引用工作表是可能的,实际上,您正试图删除无法删除的特殊工作表。索引2处的工作表的名称是什么?在第一个示例中,这一行是:sheet.Delete();在第二行:((Excel.Worksheet)theWorkbook.Sheets[i]).Delete();我更新了我的评论。请看我的其他问题。我对它进行了多次调试,对象被初始化,工作表确实存在。床单也不会隐藏。这张纸的名字是“sheet2”哈哈,我自己也有过这样的经历。。。考虑将你的问题标记为版主的注意并试图删除它,因为它不太可能帮助未来的访问者:P
static void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                throw ex;

            }
            finally
            {
                GC.Collect();
            }
        }