我正在使用Interop Excel,我的代码工作正常
class GeneralData
{ public static string excelPath = System.Windows.Forms.Application.StartupPath + @"\SteamProp";
public static ExcelApp._Application oExcel;
static ExcelApp.Workbooks oBooks;
public static ExcelApp._Workbook oBook;
static object oMissing = System.Reflection.Missing.Value;
// Function will be used in Main Form Load Method
public static void OpenExcelConnection()
{
oExcel = new ExcelApp.Application();
oExcel.Visible = false;
oBooks = oExcel.Workbooks;
oBook = oBooks.Open(excelPath, oMissing, oMissing,
oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
}
public static void ReleaseExcel()
{
try
{
oBook.Close(true, excelPath, oMissing);
oExcel.Quit();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oBook);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oBooks);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oExcel);
oBook = null;
oBooks = null;
oExcel = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
catch
{ }
}
我使(OExcel)静态从不同的形式使用它。 我打开(OExcel)并使用它然后通过调用ReleaseExcel()方法关闭。 代码工作正常,但如果从应用程序外部打开了任何不同的excel文件,则C#应用程序中使用的文件对用户显示即使:
oExcel.Visible = false;
当调用此文件的ReleaseExcel()方法未关闭时,如果我关闭了C#应用程序并再次打开它,则会引发下一个异常:
Microsoft Jet数据库引擎无法打开文件“。它已由其他用户独占打开,或者您需要权限才能查看其数据。
你能帮助我吗?
答案 0 :(得分:0)
处理完对象后,请使用
GC.Collect();
这就是我处理Excel对象的方式
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
}
finally
{
GC.Collect();
}
}