VB.NET控制EXCEL打印的速度问题!

         在用vb.net控制excel打印报表时发现一个问题,就是当记录数比较打的时候导出速度非常慢,快没法忍受了,尤其是内存比较小的时候.
         原来的代码是用一个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

      在csdn中看到有用CSV 文件做的,对csv文件还不了解,以后在说.
posted on 2007-01-11 13:37  李树成  阅读(1208)  评论(0编辑  收藏  举报