将Recordset导出到Excel

时间:2011-03-18 09:21:36

标签: vb6 export-to-excel adodb recordset

我正在尝试通过VB 6.0应用程序将Adodb Recordset导出到excell。我可以通过For Loop做到这一点。但记录集包含100列,行数为200000行。所以它耗费了大量的时间来完成这个象牙。有时它会被绞死。  有没有快速的方法来实现同样的目标? 提前谢谢

2 个答案:

答案 0 :(得分:1)

有一些方法可以显着提高ADODB.Recordset对象的性能。我用来加快速度的最佳技巧之一是在循环中创建显式的field对象:

Dim rs As New ADODB.Recordset
Dim fldLastName As ADODB.Field, fldFirstName As ADODB.Field

rs.Open "SELECT au_lname, au_fname FROM authors", "DSN=pubs", , , adCmdText

Set fldLastName = rs.Fields("au_lname")
Set fldFirstName = rs.Fields("au_fname")

Do Until rs.EOF
    csvOutput = csvOutput & fldLastName & "," & fldFirstName & vbCrLf
    rs.MoveNext
Loop
rs.Close

这可以真正加快速度,因为您在引用Recordset.Field.Value项时避免了后期绑定。试一试,您应该看到性能的巨大提升。我使用过你所描述的大型记录集,并且使用这种技术可以容忍性能。

顺便说一下,MSDN上有一篇很好的文章,其中有一些其他技巧可能有助于提高ADODB代码的性能 - ADO Performance Best Practices。这篇文章现在已经很老了,但我认为这在几年来第一次再次阅读之后仍然适用。

答案 1 :(得分:1)

一些建议:

Excel对象模型具有CopyFromRecordset方法。

Recordset对象有一个GetRows方法返回一个数组,您可以将其'转置'到Excel Range对象的Value属性中('transpose'=列到行,反之亦然 - Excel有一个Transpose工作表函数,可以通过其对象模型调用。

请注意,在Excel 2007之前,工作表限制为65,536行,您可能会发现上述Excel方法受到类似限制。

Recordset对象有一个GetString方法,可以将所有行一次写入字符串(无需循环)。

您可以完全绕过记录集并使用Access SQL(ACE,Jet等)将数据直接写入Excel,例如

SELECT *
  INTO [Excel 8.0;DATABASE=C:\MyNewWorkbook.xls].MyNewTable 
  FROM [ODBC;Driver={SQL Server};Server=MyServer;Database=MyDB;UID=Admin;PWD=***].MyDBTable;