我是否需要在foreach循环中释放excel工作表对象?

我在我的网站项目中使用C#中的Excel互操作来parsingExcel文件并将其转换为文本文件。 示例代码如下。

Excel.Application excel=new Excel.Application(); Excel.Workbooks wbs=excel.Workbooks; Excel.Workbook wb=wbs.Open(…); Try { … Foreach(Excel.Worksheet sheet in wb.Sheets) { … Marshal.RealseComObject(sheet); sheet=null; //compiler error } … } Catch() { } Finally { wb.Close(false, missing, missing); while (Marshal.ReleaseComObject(wb)!=0) { } wb=null; while (Marshal.ReleaseComObject(wbs)!=0) { } wbs=null; excel.Quit(); while (Marshal.ReleaseComObject(excel)!=0) { } excel=null; GC.Collect(); GC.WaitForPendingFinalizers(); } 

我的问题是我需要在foreach循环中释放工作表对象吗? 我看到一些关于用excel工作表进行编程的示例代码,但都没有。 如果我确实需要放弃对象,在我的foreach循环中,我无法将表单设置为null,是否意味着我不应该使用foreach?

将表单设置为null时,实际上是将wb.sheets设置为null。 我不认为Excel对象将允许。

这是,你做的真的是坏主意 – 在网站服务器上使用Office interop 。 而你的问题恰恰与你做错的商业决定有关。 你所做的,可以通过使用Microsoft.ACE.OleDb.<version>来完成。 有了ACE,你可以像db table一样查询你的工作簿,而且这个方法对于互操作来说非常简单。