질문 : 응용 프로그램이 실행되는 동안 Excel 프로세스를 닫지 않는 이유는 무엇입니까? 총을 뛰어 넘지 말고 중복으로 표시하십시오. 코드에 필요한 변경 사항을 보여줄 수 있다면 정말 고맙습니다. 응용 프로그램을 닫으면 Excel 프로세스가 제대로 닫힙니다. 지난 며칠 동안이 문제를 연구하여 몇 가지 게시물을 읽고 여러 가지 시도를했지만 가능한 경우 피하기를 선호하는 process.kill을 호출하는 것 외에는 아무 것도 작동하지 않습니다.응용 프로그램이 실행되는 동안 Excel 프로세스가 닫히지 않는 이유
Imports Microsoft.Office.Interop
Imports System.Runtime.InteropServices
Public Class Form1
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim misValue As Object
Dim xlWorkSheet As Excel.Worksheet
Try
''EXCEL CREATION/INITAILIAZATION
misValue = System.Reflection.Missing.Value
xlApp = New Microsoft.Office.Interop.Excel.Application()
If xlApp Is Nothing Then
MessageBox.Show("Excel is not properly installed!!")
xlApp = Nothing
End If
xlWorkBook = xlApp.Workbooks.Add(misValue)
''WRITE TO WORKSHEET
xlWorkSheet = TryCast(xlWorkBook.Sheets("sheet1"), Excel.Worksheet)
xlWorkSheet.Cells(1, 1) = "THIS"
xlWorkSheet.Cells(1, 2) = "IS"
xlWorkSheet.Cells(1, 3) = "A"
xlWorkSheet.Cells(1, 4) = "TEST"
''FORCEFULLY CAUSING ERROR, NOW THE EXCEL PROCESS HANGING IN TASK MANAGER
''xlWorkSheet.Cells(1, -1) = "ERROR LINE"
''SAVE WORKSHEET
Dim Name = DateTime.Now.ToString("s").Replace(":", "_")
Dim Dir = AppDomain.CurrentDomain.BaseDirectory & "Output\" & Name & "Output.xls"
xlApp.DisplayAlerts = False
xlWorkBook.CheckCompatibility = False
xlWorkBook.DoNotPromptForConvert = True
xlWorkBook.SaveAs(Dir, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, _
Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)
xlWorkBook.Close(False)
xlApp.Quit()
misValue = Nothing
If Not IsNothing(xlWorkSheet) And System.Runtime.InteropServices.Marshal.IsComObject(xlWorkSheet) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet)
xlWorkSheet = Nothing
End If
If Not IsNothing(xlWorkBook) And System.Runtime.InteropServices.Marshal.IsComObject(xlWorkBook) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook)
xlWorkBook = Nothing
End If
If Not IsNothing(xlApp) And System.Runtime.InteropServices.Marshal.IsComObject(xlApp) Then
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp)
xlApp = Nothing
End If
GC.Collect()
GC.WaitForPendingFinalizers()
Catch ex As Exception
Dim exMsg = ex.Message
End Try
End Sub
End Class
이것은 답변이 아니지만 가능한 경우 Excel 파일을 저장하기위한 좋은 API를 찾을 것을 제안합니다. interop을 사용하면 이와 같은 문제가 발생할 수 있으며 매우 느립니다. –
당신의 문제는 무엇입니까? 당신은 분명히 대담 해집니다 * 귀하의 질문에 대응하는 응용 프로그램을 닫을 때 Excel 프로세스가 잘 종료됩니다. 또한 VB.Net에 익숙하지 않지만 '잡아 먹기'에 리소스 ('xlApp = Nothing')를 배포하거나 더 나은 ['Finally'] (https://msdn.microsoft.com/en)에 있어야합니다. -us/library/fk6t46tz.aspx) 절 – Parfait
@Parfait 문제는 처음으로 굵게 표시됩니다. 하위가 선언 된 객체는 하위의 끝에서 범위를 벗어나야합니다. 위의 코드를 실행하고 버튼을 몇 번 클릭하면 모든 예외 처리 인스턴스가 서브 프로세스의 끝에서 닫히는 것을 보게 될 것입니다. – glant