在Excel中删除工作表
我几乎所有的东西,我可以在这里findStackOverflow,但我的代码不断抛出以下错误:
来自HRESULT的exception: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;
使用Excel Interop库时,我多次遇到此错误。 这个问题的主要原因(一个普通的COMexception),大多数时候,Excel试图find你所要求的东西,但Excel无法find它。 看到这个答案 ,它帮了我很多。
读这些行:
Excel.Worksheet worksheet = (Excel.Worksheet)book.Worksheets[2]; worksheet.Delete();
我认为你正试图删除一个不存在的工作表。 检查你的Excel文件。
我只是犯了最愚蠢的错误….. excel文件是一个共享文件,这就是为什么我不能删除它..
对不起,犯这样一个愚蠢的错误,并感谢所有谁试图帮助我!
HRESULT:0x800A03EC是未知的COM错误。 当Excel因为input或参数错误而抛出一些错误时,通常会发生这种情况。
本示例提供了msdn:以编程方式从工作簿中删除工作表
((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();
尝试这个:
xlApp.DisplayAlerts = false; Excel.Worksheet worksheet = (Excel.Worksheet)book.Worksheets[2]; worksheet.Delete(); xlApp.DisplayAlerts = true;
同样重要的是要记住,interop开始从1开始计数,而不是从0开始计数。所以删除item [0]或删除唯一的表将会引发你一个exception。 如果你打算删除[2]工作表,第三个将取代它的位置。 所以一定要从最后一个删除到第一个。
这是我用来删除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(); } }