DotNet zwolni obiekt COM dopiero po zwolnieniu wszystkich uchwytów. To, co robię, to komentowanie wszystkiego, a następnie dodawanie części. Sprawdź, czy zwalnia program Excel. Jeśli nie przestrzega następujących zasad. Po jej zwolnieniu dodaj więcej kodu, aż nie zwolni się ponownie.
1) Podczas tworzenia zmiennych Excel, należy ustawić wszystkie wartości null (nie unikają zainicjowany błędów)
2) Nie używaj zmiennych bez zwalniania najpierw Marshal.FinalReleaseComObject
3) Nie należy podwoić kropka (a.b = z)
. dotNet utworzyć tymczasową zmienną, która nie zostanie zwolniona.
c = a.b;
c = z;
Marshal.FinalReleaseComObject(c);
4) Zwolnij wszystkie zmienne excela. Im szybciej, tym lepiej.
5) Ustaw ponownie z powrotem na NULL.
Ustaw kulturę na "en-US". Istnieje błąd powodujący awarię Excela w niektórych kulturach. Zapewni to, że nie będzie.
Oto pomysł, jak Twój kod powinien mieć strukturę:
thisThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
InteropExcel.Application excelApp = null;
InteropExcel.Workbooks wkbks = null;
InteropExcel.Workbook wkbk = null;
try
{
excelApp = new InteropExcel.Application();
wkbks = excelApp.Workbooks;
wkbk = wkbks.Open(fileName);
...
}
catch (Exception ex)
{
}
if (wkbk != null)
{
excelApp.DisplayAlerts = false;
wkbk.Close(false);
Marshal.FinalReleaseComObject(wkbk);
wkbk = null;
}
if (wkbks != null)
{
wkbks.Close();
Marshal.FinalReleaseComObject(wkbks);
wkbks = null;
}
if (excelApp != null)
{
// Close Excel.
excelApp.Quit();
Marshal.FinalReleaseComObject(excelApp);
excelApp = null;
}
// Change culture back from en-us to the original culture.
thisThread.CurrentCulture = originalCulture;
}
Mniejsza repro pomoże. W każdym razie uruchomiłem to na moim komputerze i program Excel kończy się dobrze. Czy są zainstalowane jakieś źle zachowane dodatki programu Excel? Spróbuj usunąć je jeden po drugim, aby sprawdzić, czy ma to wpływ na możliwość wyłączenia programu Excel. –
Próbowałem proces Vanilla Excel i nadal nie zamknął.Używam formularza jako interfejsu do wywoływania tej klasy, czy może to zrobić coś, aby zachować otwarty program Excel? – user1017719
To jest właściwie trzecia odpowiedź, którą myślę, że będziesz chciał z powyższego linku. – devuxer