在c#中打开并保存excel文档

我试图用C#打开和保存一个Excel文档,但是我总是得到错误:“已经从它的底层RCW分离的COM对象不能被使用”。 在行ExcelApp.Quit(); 我GOOGLE了很多的解决scheme,但没有为我工作到目前为止。

这是我的代码:

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Office.Core; using Excel = Microsoft.Office.Interop.Excel; namespace test_excel { public partial class Form1 : Form { Excel.Application ExcelApp = null; Excel.Workbook ExcelWorkBook = null; Excel.Sheets ExcelSheets = null; Excel.Worksheet MySheet = null; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ExcelApp = new Excel.Application(); ExcelApp.Visible = false; ExcelWorkBook = ExcelApp.Workbooks.Open("c:\\test.xls", 0, true, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); ExcelSheets = ExcelWorkBook.Worksheets; MySheet = (Excel.Worksheet)ExcelSheets.get_Item("Sheet1"); int a = (int)MySheet.Range["a1"].Value2; label1.Visible = true; int b = a + 1; label1.Text = a.ToString() + " | " + b.ToString(); MySheet.Range["a1"].Value2 = b; } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Unable to release the Object " + ex.ToString()); } finally { GC.Collect(); } } private void button2_Click(object sender, EventArgs e) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelSheets); ExcelWorkBook.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value); releaseObject(ExcelApp); releaseObject(ExcelSheets); releaseObject(ExcelWorkBook); ExcelApp.Visible = false; ExcelApp.UserControl = false; ExcelWorkBook.SaveAs("c:\\test.xls", Excel.XlFileFormat.xlWorkbookNormal, null, null, false, false, Excel.XlSaveAsAccessMode.xlShared, false, false, null, null, null); ExcelWorkBook.Close(); } catch (Exception err) { String msg; msg = "Error: "; msg = String.Concat(msg, err.Message); msg = String.Concat(msg, " Line: "); msg = String.Concat(msg, err.Source); Console.WriteLine(msg); } finally { try { ExcelApp.Visible = false; ExcelApp.UserControl = false; ExcelWorkBook.Close(true, null, null); ExcelApp.Workbooks.Close(); } catch { } ExcelApp.Quit(); if (MySheet != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(MySheet); } if (ExcelWorkBook != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelWorkBook); } if (ExcelApp != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp); } MySheet = null; ExcelWorkBook = null; ExcelApp = null; GC.Collect(); } } } } 

我想你正在使ExcelApp在这里得到ExcelAppreleaseObject(ExcelApp);

然后你试图告诉它在这里执行一个方法: ExcelApp.Quit();

尝试移动releaseObject(ExcelApp); 给你打电话之后