原来的代码是用一个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文件还不了解,以后在说.