我有一個C#應用程序創建一個Excel文件。但是如果文件保持打開並且應用程序第二次運行,它會引發IO異常(因爲在代碼中,我將用新文件替換現有文件) 現在,我想檢查文件是否打開並且殺死引用此文件的excel.exe進程。 這有什麼辦法可以實現?C# - 殺死EXCEL.exe過程引用一個特定的文件
注意:可能會打開幾個excel文件。我只想關閉正在使用我的文件的進程。
xlFilePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
File.Copy(xlFilePath + "\\file.xlsx", String.Format("{0}\\OutputFile{1}.{2}.xlsx", xlFilePath, DateTime.Now.Year, DateTime.Now.Month), true);
xlFilePath = Path.Combine(xlFilePath, String.Format("{0}\\OutputFile{1}.{2}.xlsx", xlFilePath, DateTime.Now.Year, DateTime.Now.Month));
appl = new Excel.Application(Visible = false);
wbookss = appl.Workbooks;
wbook = wbookss.Open(xlFilePath);
//Excel.Worksheets wsheetss = appl.Worksheets;
wsheet = wbook.Sheets["Sheet1"];
Application_GenerateReport(wsheet);
Clipboard.Clear();
wbook.Close(true);
wbookss.Close();
appl.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(wsheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wbookss);
System.Runtime.InteropServices.Marshal.ReleaseComObject(appl);
編輯:如果在上次運行中出現異常,文件保持打開狀態。如果它是由用戶打開的,可以通過檢查MainWindowTitle屬性來殺死它(如Yeldar所建議的)。
我會說,我認爲你是從錯誤的一端接近的問題。你的程序應該優雅地處理這個異常。也許有可能重試?這比嘗試發送Excel遺忘(使用任何潛在的用戶更改)要好得多。 Plus Office傾向於用_「以前打開此文件時發生問題,再次打開該文件時出現問題?」_或某些此類 – MickyD
^該報告僅使用此應用程序生成,從未手動修改過。 – SharpCoder
[這篇文章](http://stackoverflow.com/questions/13807102/find-all-open-excel-workbooks)介紹瞭如何獲得運行excel實例。你應該考慮這個實例而不是殺死它 –