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

使用数组快速填充Excel

2012-02-01 
【分享】使用数组快速填充Excel这是一篇老文了,整理下发出来,希望能对大家有些帮助一般我们在程序中操作Exce

【分享】使用数组快速填充Excel
这是一篇老文了,整理下发出来,希望能对大家有些帮助

一般我们在程序中操作Excel时,逐单元格填充时,速度非常之慢。

其实Excel的Range可以直接绑定数组,速度极快。在下面的 VB6 示例中,填充一个1000*10的区块,

逐单元格方式要20~25秒,而数组方式瞬间内即可完成。


VB code
Private Sub Command2_Click()    Dim a(1000, 10) As Integer    Dim i As Integer    Dim j As Integer    Dim z As Integer    Dim oXLSAPP As New Excel.Application    Dim oWSheet As Worksheet        Command2.Enabled = False    '创建一个新的Excel文件    oXLSAPP.Workbooks.Add    oXLSAPP.Workbooks(1).Activate       Set oWSheet = oXLSAPP.Workbooks(1).Worksheets(1)    oWSheet.Activate        '准备一个数组        For i = 1 To 1000            For j = 1 To 10                Randomize                a(i, j) = CInt(1000 * Rnd)                Randomize                z = z + 1                DoEvents            Next        Next            '利用这个数组填充    Dim xrange As Range    Set xrange = oWSheet.Range("A1:J1000")    Label9.Caption = "正在进行逐格填充"    DoEvents           Label2(0).Caption = Now()     For i = 1 To 1000        For j = 1 To 10            xrange(i, j).Value = a(i, j)            'DoEvents        Next        'DoEvents    Next    Label3(0).Caption = Now()    Label9.Caption = "逐格填充完毕"    Label5(0).Caption = DateDiff("s", CDate(Label2(0).Caption), CDate(Label3(0).Caption)) & " 秒"    DoEvents    '-------------------------    '直接填充    Label9.Caption = "正在进行数组填充"    DoEvents    Label2(1).Caption = Now()    '##################################    '直接把数据给区块    '需要注意的是,这个区块接受数组是从序号0开始的.用的时候注意边界    oWSheet.Range("L1:U1000") = a    '##################################    Label3(1).Caption = Now()    Label9.Caption = "数组填充完毕"    Label5(1).Caption = DateDiff("s", CDate(Label2(1).Caption), CDate(Label3(1).Caption)) & " 秒"    DoEvents    Dim fname As String    fname = App.Path & "\" & Format(Now, "yyyymmddhhMMss") & ".xls"    oXLSAPP.Workbooks(1).SaveAs fname    Label9.Caption = "文件保存到 " & fname    DoEvents        Set oXLSAPP = Nothing   End Sub


示例代码下载:

http://files.cnblogs.com/babyt/APP20090208EXCEL.rar

另外特别推荐:
特别推荐:纯VB.NET代码直接生成Excel文件(不需要Excel) 


[解决办法]
小小接分
[解决办法]
看不懂,厉害
[解决办法]
好复杂~~~
[解决办法]
先收下
[解决办法]
支持下,学习了
[解决办法]
学习
[解决办法]
手下 以后会用到
[解决办法]
Mark!
[解决办法]
看不懂。郁闷。。。
[解决办法]
jf...........

^_^

[解决办法]
顶顶阿泰同学............

先收着,以后有类似需求时就可以直接用上了,谢了哈.
[解决办法]
不知道在那也看过了
[解决办法]
支持

[解决办法]
我正在解决逐单元格填充慢的问题
[解决办法]
Thank you for sharing
[解决办法]
来顶阿泰。
[解决办法]
一直都是用数组填充的哈,不过设计表格合并,处理还是用逐行的,不知道是否有更好的方法?
[解决办法]
收下,谢谢啊
[解决办法]
收下了,谢谢楼主
[解决办法]
真的是好复杂,支持一下
[解决办法]
我一直是这样用的
[解决办法]
顶楼主

ADO的RecordSet速度虽然也很好,但会有bug应用面也少些.
[解决办法]
oWSheet.Range("L1:U1000") = a
=====================
这种数组直接赋值的时候,需要检查下数组中每个元素字符串的长度,长度过长时Excel会抛异常出来0x800A03EC
[解决办法]

[解决办法]
支持,谢谢。
[解决办法]
谢谢了啊,楼主
[解决办法]
虽然看不懂,但收下了
[解决办法]
能给讲解一下吗?
[解决办法]
很实用

热点排行