so I'm using vb.net to transfer data from a excel file to list view. Everything works out fine i.e the importing part but i cant seem to release the excel object as excel.exe is still in task manager after the importing is done.
Below is the code i use
I am importing a 4 sheet workbook. but for testing purposes i tried just importing one and it still has the same issue. Although just using the code below from a button click event works fine with excel.exe closing as it should.
I'm guessing I'm not releasing everything properly in order for excel.exe to close. I've also tried the GC.Collect Method with no luck. Is it possible for someone to test this code out and see if the problem is recreated. BTW I'm using Microsoft Excel 14.0 Object Library. I'm a noob vb.net coder so appreciate any form of help.
Thanks
Below is the code i use
Code:
Private Function ExcelSheet(ByVal lst As ListView, ByVal c As Integer)
Dim Completed As Boolean = False
Dim xlsApp As Excel.Application
Dim xlsWB As Excel.Workbook
Dim xlsSheet As Excel.Worksheet
Dim columnCount As Integer = 0
Dim rowcount As Integer = 0
Dim i As Integer = 0
xlsApp = New Excel.Application
xlsApp.Visible = False
xlsApp.DisplayAlerts = False
xlsWB = xlsApp.Workbooks.OpenXML(dlgOpen.FileName)
xlsSheet = xlsWB.Worksheets(c)
xlsSheet.Select()
columnCount = xlsSheet.UsedRange.Columns.Count
rowcount = xlsSheet.UsedRange.Rows.Count - 1
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = rowcount
Do Until lst.Columns.Count = xlsSheet.UsedRange.Columns.Count
lst.Columns.Add(xlsSheet.Cells(1, i + 1).Value)
i = i + 1
Loop
Dim lvi As New ListViewItem
Dim x As Integer = 2
Dim t As Integer = 1
Dim lvwItem As New ListViewItem()
Dim d As Integer
Do Until lst.Items.Count = rowcount
d = 1
Do Until d = lst.Columns.Count + 1
If d = 1 Then
If xlsSheet.Cells(x, d).value = vbNullString Then
lvwItem = lst.Items.Add(vbNullString)
Else
lvwItem = lst.Items.Add(xlsSheet.Cells(x, d).value)
End If
Else
If xlsSheet.Cells(x, d).value = vbNullString Then
lvwItem.SubItems.Add(vbNullString)
Else
lvwItem.SubItems.Add(xlsSheet.Cells(x, d).value)
End If
End If
d = d + 1
Loop
x = x + 1
ProgressBar1.Value = lst.Items.Count
lblStatus.Text = (Math.Round((lst.Items.Count.ToString / rowcount), 1) * 100) & "%"
For e = 1 To lst.Columns.Count - 1
If lstComputers.Columns(e).Name = "Ports" Then
lst.AutoResizeColumn(e, ColumnHeaderAutoResizeStyle.ColumnContent)
Else
lst.AutoResizeColumn(e, ColumnHeaderAutoResizeStyle.HeaderSize)
End If
Next
Loop
xlsApp.DisplayAlerts = True
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlsSheet)
xlsSheet = Nothing
xlsWB.Close(SaveChanges:=False)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlsWB)
xlsWB = Nothing
xlsApp.Workbooks.Close()
xlsApp.Quit()
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlsApp)
xlsApp = Nothing
Return Completed
End Function
I am importing a 4 sheet workbook. but for testing purposes i tried just importing one and it still has the same issue. Although just using the code below from a button click event works fine with excel.exe closing as it should.
Code:
Dim xlsapp As New Excel.Application
xlsapp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsapp)
Thanks