Я вызываю следующий метод из события нажатия кнопки, чтобы экспортировать данные в Excel.После завершения экспорта объект приложения Excel завершается, освобождается и присваивается ничто.Но на самом деле он не выпускается и остается активным, если не закрыто все приложение.Поэтому каждый раз, когда нажимается кнопка для экспорта, новый объект приложения Excel продолжает работать.Как я могу решить это?Пожалуйста помоги.С уважением.
Проблема не возникает, если не используются две строки из метода ниже.Но я не могу их опустить, так как они действительно нужны.Проверьте отмеченные * строки.
''' <summary>
''' Exports data from a datatable to excel.
''' </summary>
Friend Shared Sub ExportToExcel(ByVal dtbl As DataTable)
Dim exa As Excel.Application = Nothing
Dim wkb As Excel.Workbook = Nothing
Dim wks As Excel.Worksheet = Nothing
Dim intColIndex, intRowIndex As Integer
intColIndex = 0 : intRowIndex = 2
Try
exa = New Excel.Application
exa.SheetsInNewWorkbook = 1
wkb = exa.Workbooks.Add
wks = wkb.ActiveSheet
For intColIndex = 1 To dtbl.Columns.Count
wks.Cells(1, intColIndex) = dtbl.Columns(intColIndex - 1).ColumnName
Next
For Each row As DataRow In dtbl.Rows
For intColIndex = 1 To dtbl.Columns.Count
wks.Cells(intRowIndex, intColIndex) = row(intColIndex - 1)
Next
intRowIndex += 1
Next
For intColIndex = 1 To dtbl.Columns.Count
wks.Range(wks.Cells(1, intColIndex), wks.Cells(1, intColIndex)).Font.Bold = True
wks.Range(wks.Cells(1, intColIndex), wks.Cells(1, intColIndex)).Font.Underline = True
Next
'***** The problem doesn't occur if the following two lines are not used *****
wks.Range(wks.Cells(1, 1), wks.Cells(dtbl.Rows.Count + 1, dtbl.Columns.Count)).Columns.WrapText = False
wks.Range(wks.Cells(1, 1), wks.Cells(dtbl.Rows.Count + 1, dtbl.Columns.Count)).Columns.AutoFit()
'*****************************************************************************
exa.Visible = True
exa.UserControl = True
If Not exa Is Nothing Then exa.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(wks)
wks = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(wkb)
wkb = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(exa)
exa = Nothing
Catch ex As Exception
wks = Nothing
wkb = Nothing
exa = Nothing
MsgBox("The following error has occurred:" & vbCrLf & ex.Message, MsgBoxStyle.Critical, "Error")
Finally
GC.Collect()
End Try
End Sub