Jag har följande kod som skapar en excel fil från dynamisk data. Problemet är att det tar väldigt lång tid 1min 48s för tusen rader. Sedan ligger processen EXCEL.exe kvar om man kikar i Aktivitetshanteraren fast jag har kod som ska ta bort det. Prestandaproblem med excel
Nån som har tips om prestandaökning och processavslut?
Jag har ersatt vissa av värdena om ni undrar varför det bara står "värde" i insättningen i cellerna, dessa är alla av typen varchar annars så inga speciella datatyper används.
<code>
Dim oXL As Excel.Application
Dim oWB As Excel.Workbook
Dim oSheet As Excel.Worksheet
'Dim oRng As Excel.Range
Try
GC.Collect()
' Start Excel and get Application object.
oXL = New Excel.Application()
oXL.Visible = True
oXL.UserControl = True
Dim oldCI As System.Globalization.CultureInfo = _
System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentCulture = _
New System.Globalization.CultureInfo("en-US")
'oXL.Workbooks.Add()
oWB = oXL.Workbooks.Add(Missing.Value)
oSheet = oWB.ActiveSheet
oSheet.Cells(1, 1).Value = "värde"
oSheet.Cells(1, 2).Value = "värde"
oSheet.Cells(1, 3).Value = "värde"
oSheet.Cells(1, 4).Value = "värde"
oSheet.Cells(1, 5).Value = "värde"
oSheet.Cells(1, 6).Value = "värde"
oSheet.Cells(1, 7).Value = "värde"
oSheet.Cells(1, 8).Value = "värde"
oSheet.Cells(1, 9).Value = "värde"
oSheet.Cells(1, 10).Value = "värde"
oSheet.Cells(1, 11).Value = "värde"
oSheet.Cells(1, 12).Value = "värde"
oSheet.Cells(1, 13).Value = "värde"
oSheet.Cells(1, 14).Value = "värde"
'oSheet.get_Range("A1", "N1").Font.Bold = True
'oSheet.get_Range("A1", "N1").ColorIndex = 15
'oSheet.get_Range("A1", "N1").Pattern = xlSolid
cmd.Connection.Open()
Dim myReader As SqlDataReader = cmd.ExecuteReader
Dim i As Integer = 2
While myReader.Read
oSheet.Cells(i, 1).Value = myReader("värde")
oSheet.Cells(i, 2).Value = myReader("värde")
oSheet.Cells(i, 3).Value = myReader("värde")
oSheet.Cells(i, 4).Value = myReader("värde")
oSheet.Cells(i, 5).Value = myReader("värde")
oSheet.Cells(i, 6).Value = myReader("värde")
oSheet.Cells(i, 7).Value = myReader("värde")
oSheet.Cells(i, 8).Value = myReader("värde")
oSheet.Cells(i, 9).Value = myReader("värde")
oSheet.Cells(i, 10).Value = myReader("värde")
oSheet.Cells(i, 11).Value = myReader("värde")
oSheet.Cells(i, 12).Value = myReader("värde")
oSheet.Cells(i, 13).Value = myReader("värde")
oSheet.Cells(i, 14).Value = myReader("värde")
i = i + 1
End While
myReader.Close()
myReader = Nothing
cmd.Connection.Close()
oWB.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, False, False, Excel.XlSaveAsAccessMode.xlShared, False, False, Missing.Value, Missing.Value, Missing.Value)
' Need all following code to clean up and extingush all references!!!
oWB.Close(Missing.Value, Missing.Value, Missing.Value)
oXL.Workbooks.Close()
oXL.Quit()
'System.Runtime.InteropServices.Marshal.ReleaseComObject(oRng)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oWB)
oSheet = Nothing
oWB = Nothing
oXL = Nothing
GC.Collect() ' force final cleanup!
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
errLabel.Text = "Hämta excelfil"
Catch exc As Exception
Dim errorMessage As String
errorMessage = "Fel: "
errorMessage = String.Concat(errorMessage, exc.Message)
errorMessage = String.Concat(errorMessage, " Rad: ")
errorMessage = String.Concat(errorMessage, exc.Source)
errLabel.Text = errorMessage
End Try
</code>