数据导入excel中速度的问题?为什么很慢,而且cpu占用很多?

奈伊组特 2004-10-18 03:33:22
我是这样写的:
Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "路径")
conn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "路径")
conn.Open()
Dim da As New OleDb.OleDbDataAdapter("select * from TABLE", conn)
Dim ds As New DataSet
da.Fill(ds, "table")
Dim xsheel As New Excel.Application
xsheel.Workbooks.Open("c:\data.xls")
xsheel.Visible = True
Dim rowIndex As Integer
Dim colIndex As Integer
Dim Col As DataColumn
Dim Row As DataRow
rowIndex = 3
colIndex = 1
'得到的表所有行,赋值给单元格
For Each Row In temptable.Rows
rowIndex = rowIndex + 1
colIndex = 0
For Each Col In temptable.Columns
colIndex = colIndex + 1
xsheel.Cells(rowIndex, colIndex) = Row(Col.ColumnName)
Next
Next
ds.Dispose()
conn.Close()

这样数据只有五百左右就很慢了,而且cpu占用是100% 怀疑是for循环的问题. 但是我是需要把数据导入已建表中 行和列都要定位,有什么办法能使cpu不占用那么多,最好速度也能快一点.不过关键是不要100%的占用cpu,否则就像死机一样. 请指教,谢谢!
...全文
682 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
奈伊组特 2004-10-25
  • 打赏
  • 举报
回复
thanks
accpzj 2004-10-22
  • 打赏
  • 举报
回复
改这句 Dim DataArray(rows - 1, cols - 1) As String
为 Dim DataArray(rows - 1, cols - 1) As object
chinaren502 2004-10-20
  • 打赏
  • 举报
回复
ok good

奈伊组特 2004-10-20
  • 打赏
  • 举报
回复
我也不大懂
我看是不是路径有问题?d:\\myexcel.xls 这样d:\myexcel.xls试试
还有ds.tables[0][i,j]是什么意思?

xy163 2004-10-20
  • 打赏
  • 举报
回复
有没有大侠帮我看看!
Relta 2004-10-19
  • 打赏
  • 举报
回复
我使用的方法同zj(天山童不老) 一樣,六千條數據隻需五六秒種!
xy163 2004-10-19
  • 打赏
  • 举报
回复
我想请问下在页面上的一个 datagrid 里面有数据 是从DATASET 绑定而来 并且要把这个页面保存在一个
已经存在的EXCEL模版里面 我写了下面的代码
string filename="d:\\myexcel.xls";
Excel.Application xlApp = new Excel.Application();
  if(xlApp==null){MessageBox.Show ("Can't open Excel!");return;}
  xlApp.Application .Workbooks .open (filename);
for(int i=1;i<ds.tables[0].count.rows;i++)
{
for(int j=0;j<7;j++)
{
xlApp .Cells[8+i,1+j]="'"+ds.tables[0][i,j];
}
}
请问这样写 为什么不对!
谁能帮我改下错!
或给个这方面的例子
谢谢


奈伊组特 2004-10-19
  • 打赏
  • 举报
回复
谢谢各位! 用accpzj(天山童不老) 的方法速度很快 就是各个字段的数据都变成了字符串格式 有什么办法让是数值型的还是数值型的格式?
hlsky 2004-10-18
  • 打赏
  • 举报
回复
'Dim dr As DataRow, ary() As Object
For iRow = 0 To MYTABLE.Rows.Count - 1
dr = MYTABLE.Rows.Item(iRow)
ary = dr.ItemArray
For iCol = 0 To UBound(ary)
.Cells(iRow + 2, iCol + 1) = ary(iCol).ToString
Next iCol
Next iRow
End With
这样写CPU不是100%,速度还可以,主要区别自己看,试试好了
accpzj 2004-10-18
  • 打赏
  • 举报
回复
你一个一个填充单元格当然慢啦,用数组快多了
Public Sub Exports2Excel(ByVal Dtg As DataGrid)
If Dtg.VisibleRowCount > 0 Then
Try
Me.Cursor = Cursors.WaitCursor
Dim datav As New DataView
If TypeOf Dtg.DataSource Is DataView Then
datav = CType(Dtg.DataSource, DataView)
ElseIf TypeOf Dtg.DataSource Is DataSet Then
datav = CType(Dtg.DataSource, DataSet).Tables(0).DefaultView
ElseIf TypeOf Dtg.DataSource Is DataTable Then
datav = CType(Dtg.DataSource, DataTable).DefaultView
End If
Dim i, j As Integer
Dim rows As Integer = datav.Table.Rows.Count
Dim cols As Integer = datav.Table.Columns.Count
Dim DataArray(rows - 1, cols - 1) As String
Dim myExcel As Excel.Application = New Excel.Application
For i = 0 To rows - 1
For j = 0 To cols - 1
DataArray(i, j) = datav.Table.Rows(i).Item(j)
Next
Next
myExcel.Application.Workbooks.Add(True)
myExcel.Visible = True
For j = 0 To cols - 1
myExcel.Cells(1, j + 1) = datav.Table.Columns(j).ColumnName
Next
myExcel.Range("A2").Resize(rows, cols).Value = DataArray

Catch exp As Exception
MessageBox.Show("数据导出失败!请查看是否已经安装了Excel", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning)
Finally
Me.Cursor = Cursors.Default
End Try
Else
MessageBox.Show("没有数据!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
我不懂电脑 2004-10-18
  • 打赏
  • 举报
回复
excel是很慢在bcb里用ADO就很快。
mathsword 2004-10-18
  • 打赏
  • 举报
回复
垃圾回收的问题,给你一篇文章看看,不行的话我给你个例子
http://support.microsoft.com/default.aspx?scid=kb;EN-US;317109
Eddie005 2004-10-18
  • 打赏
  • 举报
回复
这个问题你可能要问Microsoft了,
反正一句话,慢!

给你几个解决办法
1)如果是格式非常规则的excel工作簿文件,那么可能使用ado.net,把它当作一个数据库来操作
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+
"Data Source=c:\data.xls;" +
"Extended Properties=\"Excel 8.0;\"");

try//尝试数据连接是否可用
{
conn.Open();
conn.Close();
canOpen=true;
}
catch{}

2)可以直接写文件,创建一个文本文件,写进<table><tr><td></td>.......的内容,保存为.xls文件
3)第三方控件www.farpoint.com,用法类似DataGrid,不过提供SaveExcel()方法

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧