У меня есть эта программа на C#, которая никогда не закрывает процесс Excel. В основном он находит количество экземпляров строки в формате Excel. Я пробовал всевозможные вещи, но он не работает. Существует форма, вызывающая этот метод, но это не должно меняться, почему процесс не закрывается. Я смотрю предложения Ханса Пассана, но никто не работает.Процесс Excel не закрывается
EDIT: Я попробовал упомянутые вещи, и он все равно не будет закрыт. Вот мой обновленный код. EDIT: Пробовал весь процесс Process.Kill(), и это работает, но это похоже на взломать что-то, что должно просто работать.
public class CompareHelper
{
// Define Variables
Excel.Application excelApp = null;
Excel.Workbooks wkbks = null;
Excel.Workbook wkbk = null;
Excel.Worksheet wksht = null;
Dictionary<String, int> map = new Dictionary<String, int>();
// Compare columns
public void GetCounts(string startrow, string endrow, string columnsin, System.Windows.Forms.TextBox results, string excelFile)
{
results.Text = "";
try
{
// Create an instance of Microsoft Excel and make it invisible
excelApp = new Excel.Application();
excelApp.Visible = false;
// open a Workbook and get the active Worksheet
wkbks = excelApp.Workbooks;
wkbk = wkbks.Open(excelFile, Type.Missing, true);
wksht = wkbk.ActiveSheet;
...
}
catch
{
throw;
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (wksht != null)
{
//wksht.Delete();
Marshal.FinalReleaseComObject(wksht);
wksht = null;
}
if (wkbks != null)
{
//wkbks.Close();
Marshal.FinalReleaseComObject(wkbks);
wkbks = null;
}
if (wkbk != null)
{
excelApp.DisplayAlerts = false;
wkbk.Close(false, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(wkbk);
wkbk = null;
}
if (excelApp != null)
{
excelApp.Quit();
Marshal.FinalReleaseComObject(excelApp);
excelApp = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
/*
Process[] processes = Process.GetProcessesByName("EXCEL");
foreach (Process p in processes)
{
p.Kill();
}
*/
}
}
}
Меньшая репро поможет. Во всяком случае, я запускал это на своей машине, и Excel закрывается просто отлично. У вас установлены некорректные надстройки Excel? Попробуйте удалить их один за другим, чтобы увидеть, влияет ли это на способность Excel отключиться. –
Я пробовал ванильный процесс Excel, и он все еще не закрывался.Я использую форму в качестве интерфейса для вызова этого класса, может ли это что-то сделать, чтобы открыть Excel? – user1017719
На самом деле это третий ответ, который, я думаю, вам понадобится из приведенной выше ссылки. – devuxer