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) を static にしました。(OExcel) を開いて使用し、最後に ReleaseExcel() メソッドを呼び出して閉じます。コードは正常に動作しますが、アプリケーションの外部から開かれた別の Excel ファイルがあった場合、C# アプリケーションで使用されたファイルは次のようにユーザーに表示されます。
oExcel.Visible = false;
このファイルを呼び出した ReleaseExcel() メソッドが閉じず、C# アプリケーションを閉じて再度開くと、次の例外が発生します。
Microsoft Jet データベース エンジンはファイル " を開けません。このファイルは既に別のユーザーによって排他的に開かれているか、そのデータを表示する権限が必要です。
それで、あなたは私を助けてくれませんか。