Выпуск Excel после использования Interop - PullRequest
2 голосов
/ 05 мая 2010

Я прочитал много постов в поисках своего ответа, но все похожи на это: Чтение файлов Excel в vb.net приводит к зависанию процесса Excel

Моя проблема в том, что я не закрываю приложение ...

Идея такова:

Если у пользователя есть Excel Open, если у него есть файл, который мне интересен, откройте ... получите этот экземпляр Excel и делайте все, что я хочу ...

Но я не закрываю его Файл после того, как я закончу ... Я хочу, чтобы он продолжал работать над ним, проблема в том, что когда он закрывает Excel ... Процесс продолжает работать ... и работает. .. и работает после того, как пользователь закрывает Excel кнопкой X ...

вот как я пытаюсь это сделать

Этот фрагмент используется, чтобы узнать, открыт ли у него Excel, и в поле «Я проверяю» интересующее меня имя файла.

    Try
        oApp = GetObject(, "Excel.Application")
        libroAbierto = True
        For Each libro As Microsoft.Office.Interop.Excel.Workbook In oApp.Workbooks
            If libro.Name = EquipoASeccionIdSeccion.Text & ".xlsm" Then
                Exit Try
            End If
        Next
        libroAbierto = False
    Catch ex As Exception
        oApp = New Microsoft.Office.Interop.Excel.Application
    End Try

вот мой код ... если у него не открыт Excel, я создаю новый экземпляр, открываю файл и все остальное.

Мой код заканчивается так:

If Not libroAbierto Then
        libroSeccion.Close(SaveChanges:=True)
        oApp.Quit()
    Else
        oApp.UserControl = True
        libroSeccion.Save()
    End If    
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(libroOriginal)
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(libroSeccion)
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(origen)
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(copiada)
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oApp)
    libroOriginal = Nothing
    libroSeccion = Nothing
    oApp = Nothing
    origen = Nothing
    copiada = Nothing
    nuevosGuardados = True

Таким образом, вы можете видеть, что, если я открыл файл, я вызываю oApp.Quit () и все остальное, и процесс Excel завершается через несколько секунд (возможно, примерно 5).

НО, если я имею в виду, что пользователь оставляет файл открытым (не вызывая Quit ()), процесс Excel продолжает работать после того, как пользователь закрывает Excel кнопкой X.

Есть ли способ сделать то, что я пытаюсь сделать ?? Управляйте открытым экземпляром Excel и освобождайте все, поэтому, когда пользователь закрывает его кнопкой X, процесс Excel обычно умирает ???

Спасибо !!!

1 Ответ

0 голосов
/ 05 мая 2010

Мне кажется, что было бы лучше использовать CreateObject вместо GetObject(, "Excel.Application") (см. http://support.microsoft.com/kb/288902/en и http://technet.microsoft.com/en-us/library/ee176980.aspx). Затем вызов метода Quit перед вызовом FinalReleaseComObject и assigninh Nothing будет иметь ясный смысл.

...