Лучший вариант, чем Process.Kill () - PullRequest
4 голосов
/ 01 июля 2010

Есть ли лучший способ, чем убить () процесс, который архивирует тот же результат. Когда я убиваю () процесс Excel, в следующий раз, когда я открываю любой лист Excel, открывается боковая панель «Восстановление документа», что я не хочу делать.

Ответы [ 4 ]

5 голосов
/ 01 июля 2010

Добавить ссылку .Net на Microsoft.Office.Interop.Excel. Затем взгляните на следующий код, который я собрал вместе:

Microsoft.Office.Interop.Excel.ApplicationClass _excel;
Microsoft.Office.Interop.Excel.Workbook _workBook;

private void Form1_Load(object sender, EventArgs e)
{
    _excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
    _excel.Visible = true;

    // Open the workbook
    _workBook = _excel.Workbooks.Open(@"DataSheet.xls",
        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);

}

private void btn_Close_Click(object sender, EventArgs e)
{

    GC.Collect();
    GC.WaitForPendingFinalizers();

    _workBook.Close(false, Type.Missing, Type.Missing);
    _excel.Quit();

    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_workBook);
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_excel);

}
2 голосов
/ 01 июля 2010

Не уверен, поможет ли это при запуске Excel в веб-браузере.Если вы можете получить экземпляр Excel, который работает, вы можете найти книгу, которую хотите закрыть ...

try
{
    // Grab a reference to an open instance of Excel
    var oExcelApp =
        (Microsoft.Office.Interop.Excel.Application)
        Marshal.GetActiveObject("Excel.Application");

    // Loop around the workbooks to find the one you want to close
    for (int i = 1; i <= oExcelApp.Workbooks.Count; i++)
    {
        if (oExcelApp.Workbooks[i].Name == "requiredname")
            oExcelApp.Workbooks[i].Close(Type.Missing, Type.Missing, Type.Missing);

    }

    // Clear up...
    Marshal.FinalReleaseComObject(oExcelApp);

}
catch(Exception ex)
{
   // Something went wrong... 
}
1 голос
/ 01 июля 2010

Поскольку это Excel, как на самом деле поговорить с Excel и попросить его закрыть? Вы можете сделать это с помощью COM.

0 голосов
/ 01 июля 2010

Можно также вызвать Process.CloseMainWindow () .

...