首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

一次性将大量数据写下到EXCEL中

2012-12-29 
一次性将大量数据写入到EXCEL中之前的帖子http://bbs.csdn.net/topics/390310163实际的运算远不止求6个数

一次性将大量数据写入到EXCEL中


之前的帖子http://bbs.csdn.net/topics/390310163

实际的运算远不止求6个数的和,有很多的判断在里边
算出结果大概花费1分钟(这个我能接受),所有可能的组合都被存在一个一维数组temp()里,现在要把这些组合输出到EXCEL里,大概有30W组,每组6个数,也就是说有30W行数据,每行6个数

(之前也想用二维数组来保存的,但是因为行数不确定,二维动态数组也不熟悉,就改用一维了)

        Dim index As Long
        For index = 1 To total   ’total为计算出来的总组合数,即行数
            xlSheet.Cells(index, 1) = temp((index - 1) * 6)
            xlSheet.Cells(index, 2) = temp((index - 1) * 6 + 1)
            xlSheet.Cells(index, 3) = temp((index - 1) * 6 + 2)
            xlSheet.Cells(index, 4) = temp((index - 1) * 6 + 3)
            xlSheet.Cells(index, 5) = temp((index - 1) * 6 + 4)
            xlSheet.Cells(index, 6) = temp((index - 1) * 6 + 5)
        Next



我知道这样单元格一个一个的写会很慢,但不知如何改。请前辈们赐教

另外我用的是VB2010

分只能给这么多了,穷啊




[解决办法]
在你那个贴里面,50万条数据写入只要1秒……
[解决办法]
你是要向已经存在的excel表格里面添加吗?
[解决办法]
定义一个结构体的一维数组,每个结构元素含有六个元素,这样显得程序更优条理,可读性更强。存入Excel的方法,我建议采用ADO对象来操作,这样的安全性应该更强。就像操作数据库一样。时间开销差不多吧。
http://download.csdn.net/detail/xiaolong1012/3340952
[解决办法]
二维动态数组这样定义和使用:
建议先安装补丁:VB6SP6:http://www.mndsoft.com/blog/default.asp  
Option Explicit

Dim Data() As String
Dim m As Long, n As Long

Private Sub Command1_Click()
   m = 200: n = 10
   ReDim Data(1 To m, 1 To n) As String
      
   m = 400: n = 20
   ReDim Data(1 To m, 1 To n) As String
      
   m = 800: n = 40
   ReDim Data(1 To m, 1 To n) As String
   
End Sub



用二维数组填充Excel一个区域的例子:
'引用对象库:Microsoft Excel 11.0 Object Library
Option Explicit

Dim xlExcel As New Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Private Sub Command1_Click()

        Dim Data(1 To 200, 1 To 10) As String
        Dim i As Long, j As Long
        


        For i = 1 To 200
            For j = 1 To 10
                Data(i, j) = j
            Next
        Next
        
        On Error GoTo Errhandler
        xlExcel.Application.Visible = True
        Me.MousePointer = vbHourglass
        xlExcel.Workbooks.Add
        xlExcel.Workbooks(1).Activate
        Set xlSheet = xlExcel.Workbooks(1).Worksheets(1)
        xlSheet.Activate
        xlSheet.Columns("A:J").NumberFormatLocal = "@" '设置A-J列为文本格式。
        '或者xlSheet.Range("A:J").NumberFormatLocal = "@"
        xlSheet.Range("A1:J200 ") = Data '填充数组到区域A1到J200
        xlSheet.Columns.EntireColumn.AutoFit '列自适应
        Me.MousePointer = vbDefault
        
Errhandler:
        Exit Sub
End Sub

Private Sub Form_Unload(Cancel As Integer)
    On Error Resume Next
    xlBook.Close
    xlExcel.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlExcel = Nothing
End Sub


[解决办法]
如果是 ADO 或 DAO 的记录集,倒是有方便的方法,Excel 的 Range 对象有 CopyFromRecordset 方法,一次性地将数据导入 Excel 工作表。

另一个办法,是将数据转为字符串,列用 Tab 分隔,行用回车分隔,复制到剪贴板中。Range 对象有 PasteSpecial 方法,从剪贴板粘贴数据到工作表指定位置。

总之,逐个 Cell 赋值的方法是最慢的,尽可能避免。

[解决办法]
引用:
引用:
二维动态数组这样定义和使用:
建议先安装补丁:VB6SP6:http://www.mndsoft.com/blog/default.asp  
Visual Basic code?12345678910111213141516Option Explicit Dim Data() As StringDim m As Long, n As Long ……

第1个问题很简单:将Data1(n,m)转置为Data2(m,n),行变列,列变行;
第2个问题也很简单:列数为6,即A、B、C、D、E、F共6列,xlSheet.Range("A1:F" & m) = Data,m是可变的行数值,经过6楼程序测试成功。

热点排行