VB.NET控制EXCEL打印的速度问题!
在用vb.net控制excel打印报表时发现一个问题,就是当记录数比较打的时候导出速度非常慢,快没法忍受了,尤其是内存比较小的时候.
原来的代码是用一个for循环直接向sheets.Cell中添数据,行少的时候还行,行多了就完了.哪是一个慢啊.后来是用for循环向数组中写数据然后在用数组向sheets.Range.Value中写数据.速度有所提高,但仍然不理想.
代码如下:
在csdn中看到有用CSV 文件做的,对csv文件还不了解,以后在说.
原来的代码是用一个for循环直接向sheets.Cell中添数据,行少的时候还行,行多了就完了.哪是一个慢啊.后来是用for循环向数组中写数据然后在用数组向sheets.Range.Value中写数据.速度有所提高,但仍然不理想.
代码如下:
Dim DataArray(ds.Tables("tj").Rows.Count, 9) As Object
For i = 0 To ds.Tables("tj").Rows.Count - 1
DataArray(3 + i + j, 0) = ds.Tables("tj").Rows(i).Item("fph")
DataArray(3 + i + j, 1) = ds.Tables("tj").Rows(i).Item("spm")
DataArray(3 + i + j, 2) = ds.Tables("tj").Rows(i).Item("zsl")
DataArray(3 + i + j, 3) = ds.Tables("tj").Rows(i).Item(3)
'计算总费用
Dim fysql As New OleDb.OleDbCommand
Dim zfy As Double
fysql.CommandText = "select sum(je) from fy where fph='" + ds.Tables("tj").Rows(i).Item("fph") + "' group by fph"
fysql.Connection = conn
conn.Open()
zfy = fysql.ExecuteScalar()
conn.Close()
Select Case ds.Tables("tj").Rows(i).Item("bz")
Case "美元"
DataArray(3 + i + j, 5) = ds.Tables("tj").Rows(i).Item("bgje")
'利润=sum(单价*数量)-总费用+退税金额
DataArray(3 + i + j, 6) = ds.Tables("tj").Rows(i).Item("zz") * CSng(TextBox2.Text) - zfy + ds.Tables("tj").Rows(i).Item("tsje") '按美元汇率计算利润
Case "日元"
DataArray(3 + i + j, 4) = ds.Tables("tj").Rows(i).Item("bgje")
DataArray(3 + i + j, 6) = ds.Tables("tj").Rows(i).Item("zz") * CSng(TextBox1.Text) - zfy + ds.Tables("tj").Rows(i).Item("tsje") '按日元汇率计算利润
End Select
DataArray(3 + i + j, 7) = ds.Tables("tj").Rows(i).Item("myfs")
DataArray(3 + i + j, 8) = ds.Tables("tj").Rows(i).Item("hxdh")
Next
sheet.Range(sheet.Cells(3, 1), sheet.Cells(ds.Tables("tj").Rows.Count + 2, 9)).Value = DataArray
sheet.Range(sheet.Cells(3, 1), sheet.Cells(i + 2, 9)).Borders.LineStyle = 1
For i = 0 To ds.Tables("tj").Rows.Count - 1
DataArray(3 + i + j, 0) = ds.Tables("tj").Rows(i).Item("fph")
DataArray(3 + i + j, 1) = ds.Tables("tj").Rows(i).Item("spm")
DataArray(3 + i + j, 2) = ds.Tables("tj").Rows(i).Item("zsl")
DataArray(3 + i + j, 3) = ds.Tables("tj").Rows(i).Item(3)
'计算总费用
Dim fysql As New OleDb.OleDbCommand
Dim zfy As Double
fysql.CommandText = "select sum(je) from fy where fph='" + ds.Tables("tj").Rows(i).Item("fph") + "' group by fph"
fysql.Connection = conn
conn.Open()
zfy = fysql.ExecuteScalar()
conn.Close()
Select Case ds.Tables("tj").Rows(i).Item("bz")
Case "美元"
DataArray(3 + i + j, 5) = ds.Tables("tj").Rows(i).Item("bgje")
'利润=sum(单价*数量)-总费用+退税金额
DataArray(3 + i + j, 6) = ds.Tables("tj").Rows(i).Item("zz") * CSng(TextBox2.Text) - zfy + ds.Tables("tj").Rows(i).Item("tsje") '按美元汇率计算利润
Case "日元"
DataArray(3 + i + j, 4) = ds.Tables("tj").Rows(i).Item("bgje")
DataArray(3 + i + j, 6) = ds.Tables("tj").Rows(i).Item("zz") * CSng(TextBox1.Text) - zfy + ds.Tables("tj").Rows(i).Item("tsje") '按日元汇率计算利润
End Select
DataArray(3 + i + j, 7) = ds.Tables("tj").Rows(i).Item("myfs")
DataArray(3 + i + j, 8) = ds.Tables("tj").Rows(i).Item("hxdh")
Next
sheet.Range(sheet.Cells(3, 1), sheet.Cells(ds.Tables("tj").Rows.Count + 2, 9)).Value = DataArray
sheet.Range(sheet.Cells(3, 1), sheet.Cells(i + 2, 9)).Borders.LineStyle = 1
在csdn中看到有用CSV 文件做的,对csv文件还不了解,以后在说.