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
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.
Dim xlsapp As New Excel.Application xlsapp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsapp)
I'm guessing I'm not releasing everything properly in order for excel.exe to close. I'm a noob vb.net coder so appreciate any form of help.
Thanks