我有以下代码:
private bool IsMousetrapFile(string path)
{
logger.Log(validateFileMessage + path);
Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook xlWorkBook = workbooks.Open(path, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Excel.Sheets worksheets = (Excel.Sheets)xlWorkBook.Worksheets;
Excel.Worksheet ws = null;
foreach (string sheet in expectedWorksheets)
{
try
{
ws = (Excel.Worksheet)worksheets.get_Item(sheet);
logger.Log(validMousetrapFileMessage + path);
}
catch
{
logger.Log(validateSheetError + sheet + ": " + path);
if (ws != null)
Marshal.ReleaseComObject(ws);
Marshal.ReleaseComObject(worksheets);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(workbooks);
Marshal.ReleaseComObject(xlApp);
return false;
}
}
if (ws != null)
Marshal.ReleaseComObject(ws);
Marshal.ReleaseComObject(worksheets);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(workbooks);
Marshal.ReleaseComObject(xlApp);
return true;
}
Run Code Online (Sandbox Code Playgroud)
实际上,它会检查Excel工作簿是否包含特定工作表.无论是否存在,我都希望Excel流程结束.但是,每次打开新工作簿时,都会添加一个新进程,并且永远不会删除?
PS.我知道那里有重复的代码....它应该很快整理:)
HAB*_*JAN 10
使用Excel.Application.Quit()
当你与处理或任何你正在做的做了.
在你的情况下: xlApp.Quit();
更新:
@Lasse V. Karlsen指出如果Excel已经运行该怎么办.好吧,这是一个解决方案:(我没有测试代码,这只是为了给你一个想法)
private void TestMethod()
{
bool excelWasRunning = System.Diagnostics.Process.GetProcessesByName("excel").Length > 0;
// your code
if (!excelWasRunning)
{
xlApp.Quit();
}
}
Run Code Online (Sandbox Code Playgroud)