2011-12-13 17 views
6

Tworzę aplikację Excel z C#. Ponieważ zachowam plik excel w trybie pilnym, chcę zachować jego program obsługi otwarty. Chcę zachować identyfikator procesu Excel, więc będę mógł go zabić w przypadku awarii systemu.Otrzymywanie ID procesu aplikacji Excel

W jaki sposób mogę pobrać paczkę Excela podczas jej tworzenia?

+0

można zacząć mówić nam, jak stworzyć/Otwórz program Excel ? pokaż jakiś kod, proszę –

+1

Do czego potrzebujesz PID? możesz wypuścić obiekty Comarcha samemu. – Shai

Odpowiedz

-2

Oto przykład, jak otworzyć plik programu Excel przy użyciu Excel-Interop, a właściwie usuwania instancji (źródło: Google)

Application ExcelObj = new Application(); 
    Workbook WB = ExcelObj.Workbooks.Open(fileName, 
     0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", 
     false, false, 0, true, false, false); 
    Sheets sheets = WB.Worksheets; 
    Worksheet WS = (Worksheet)sheets.get_Item(1); 
    Range excelRange = WS.UsedRange; 

     ... (DO STUFF?) 

     // Get rid of everything - close Excel 
     while (Marshal.ReleaseComObject(WB) > 0) { } 
     WB = null; 
     while (Marshal.ReleaseComObject(sheets) > 0) { } 
     sheets = null; 
     while (Marshal.ReleaseComObject(WS) > 0) { } 
     WS = null; 
     while (Marshal.ReleaseComObject(excelRange) > 0) { } 
     excelRange = null; 
     GC(); 
     ExcelObj.Quit(); 
     while (Marshal.ReleaseComObject(ExcelObj) > 0) { } 
     ExcelObj = null; 
     GC(); 

    public static void GC() 
    { 
     System.GC.Collect(); 
     System.GC.WaitForPendingFinalizers(); 
     System.GC.Collect(); 
     System.GC.WaitForPendingFinalizers(); 
    } 
+0

Dlaczego spadł? Po prostu ciekawy .. – abhilash

+0

Bije mnie! ten przykład kodu działa w 100% ... – Shai

+0

Prawdopodobnie został odrzucony, ponieważ nie odpowiada na pytanie! Jeśli Excel wyjdzie na lunch, co często robi, zwolnienie wszystkich odniesień do niego nie zabije go. POTRZEBUJESZ ID procesu. –

22
using Excel = Microsoft.Office.Interop.Excel; 
using System.Runtime.InteropServices; 
using System.Diagnostics; 

class Sample 
{ 
    [DllImport("user32.dll")] 
    static extern int GetWindowThreadProcessId(int hWnd, out int lpdwProcessId); 

    Process GetExcelProcess(Excel.Application excelApp) 
    { 
     int id; 
     GetWindowThreadProcessId(excelApp.Hwnd, out id); 
     return Process.GetProcessById(id); 
    } 
} 
+0

działa bardzo dobrze, dziękuję! – Belial09

Powiązane problemy