分享

使用CopyFromRecordset导入记录集 - 数据库与Office - VB技巧 ...

 昵称728549 2010-02-05



方法挺多的,先把记录集弄到控件上,然后用控件的属性一条一条导到EXCEL 里,这种方法,如果数据量小的话还行,数据量大的话……有次无聊弄了个70列10000行的表格导了那么一下子,不能怪俺机器配置不好,因为客户的机器配置不一定比我的好,居然用了近一个钟头。这种方法不能用在数据量大的地方,用了会挨骂的。

也用过ADOX导过,速度不赖,但总觉得怪怪的,具体怪到哪了,我也不知道。

下面写个ADO的一个方法,速度不赖,代码也不太拉杂,大家如果有兴趣的话可以看看。

定义一个数组

Public arrExl(255)    As String

'定义Excel列表头的,据我所知,2003版本的EXCEL好像默认最大是256列,也就是到了IV列,下面是定义的
'数组,各位如果为了省空间可以自己删减该数组的大小。为了这个数组,我可是折腾了半天呀,也算是
'个资源。
Public Function LoadArrExl() As Boolean
    On Error GoTo ErrMsg
    LoadArrFild = False
    arrExl(0) = "a"
    arrExl(1) = "b"
    arrExl(2) = "c"
    arrExl(3) = "d"
    arrExl(4) = "e"
    arrExl(5) = "f"
    arrExl(6) = "g"
    arrExl(7) = "h"
    arrExl(8) = "i"
    arrExl(9) = "j"
    arrExl(10) = "k"
    arrExl(11) = "l"
    arrExl(12) = "m"
    arrExl(13) = "n"
    arrExl(14) = "o"
    arrExl(15) = "p"
    arrExl(16) = "q"
    arrExl(17) = "r"
    arrExl(18) = "s"
    arrExl(19) = "t"
    arrExl(20) = "u"
    arrExl(21) = "v"
    arrExl(22) = "w"
    arrExl(23) = "x"
    arrExl(24) = "y"
    arrExl(25) = "z"
    arrExl(26) = "aa"
    arrExl(27) = "ab"
    arrExl(28) = "ac"
    arrExl(29) = "ad"
    arrExl(30) = "ae"
    arrExl(31) = "af"
    arrExl(32) = "ag"
    arrExl(33) = "ah"
    arrExl(34) = "ai"
    arrExl(35) = "aj"
    arrExl(36) = "ak"
    arrExl(37) = "al"
    arrExl(38) = "am"
    arrExl(39) = "an"
    arrExl(40) = "ao"
    arrExl(41) = "ap"
    arrExl(42) = "aq"
    arrExl(43) = "ar"
    arrExl(44) = "as"
    arrExl(45) = "at"
    arrExl(46) = "au"
    arrExl(47) = "av"
    arrExl(48) = "aw"
    arrExl(49) = "ax"
    arrExl(50) = "ay"
    arrExl(51) = "az"
    arrExl(52) = "ba"
    arrExl(53) = "bb"
    arrExl(54) = "bc"
    arrExl(55) = "bd"
    arrExl(56) = "be"
    arrExl(57) = "bf"
    arrExl(58) = "bg"
    arrExl(59) = "bh"
    arrExl(60) = "bi"
    arrExl(61) = "bj"
    arrExl(62) = "bk"
    arrExl(63) = "bl"
    arrExl(64) = "bm"
    arrExl(65) = "bn"
    arrExl(66) = "bo"
    arrExl(67) = "bp"
    arrExl(68) = "bq"
    arrExl(69) = "br"
    arrExl(70) = "bs"
    arrExl(71) = "bt"
    arrExl(72) = "bu"
    arrExl(73) = "bv"
    arrExl(74) = "bw"
    arrExl(75) = "bx"
    arrExl(76) = "by"
    arrExl(77) = "bz"
    arrExl(78) = "ca"
    arrExl(79) = "cb"
    arrExl(80) = "cc"
    arrExl(81) = "cd"
    arrExl(82) = "ce"
    arrExl(83) = "cf"
    arrExl(84) = "cg"
    arrExl(85) = "ch"
    arrExl(86) = "ci"
    arrExl(87) = "cj"
    arrExl(88) = "ck"
    arrExl(89) = "cl"
    arrExl(90) = "cm"
    arrExl(91) = "cn"
    arrExl(92) = "co"
    arrExl(93) = "cp"
    arrExl(94) = "cq"
    arrExl(95) = "cr"
    arrExl(96) = "cs"
    arrExl(97) = "ct"
    arrExl(98) = "cu"
    arrExl(99) = "cv"
    arrExl(100) = "cw"
    arrExl(101) = "cx"
    arrExl(102) = "cy"
    arrExl(103) = "cz"
    arrExl(104) = "da"
    arrExl(105) = "db"
    arrExl(106) = "dc"
    arrExl(107) = "dd"
    arrExl(108) = "de"
    arrExl(109) = "df"
    arrExl(110) = "dg"
    arrExl(111) = "dh"
    arrExl(112) = "di"
    arrExl(113) = "dj"
    arrExl(114) = "dk"
    arrExl(115) = "dl"
    arrExl(116) = "dm"
    arrExl(117) = "dn"
    arrExl(118) = "do"
    arrExl(119) = "dp"
    arrExl(120) = "dq"
    arrExl(121) = "dr"
    arrExl(122) = "ds"
    arrExl(123) = "dt"
    arrExl(124) = "du"
    arrExl(125) = "dv"
    arrExl(126) = "dw"
    arrExl(127) = "dx"
    arrExl(128) = "dy"
    arrExl(129) = "dz"
    arrExl(130) = "ea"
    arrExl(131) = "eb"
    arrExl(132) = "ec"
    arrExl(133) = "ed"
    arrExl(134) = "ee"
    arrExl(135) = "ef"
    arrExl(136) = "eg"
    arrExl(137) = "eh"
    arrExl(138) = "ei"
    arrExl(139) = "ej"
    arrExl(140) = "ek"
    arrExl(141) = "el"
    arrExl(142) = "em"
    arrExl(143) = "en"
    arrExl(144) = "eo"
    arrExl(145) = "ep"
    arrExl(146) = "eq"
    arrExl(147) = "er"
    arrExl(148) = "es"
    arrExl(149) = "et"
    arrExl(150) = "eu"
    arrExl(151) = "ev"
    arrExl(152) = "ew"
    arrExl(153) = "ex"
    arrExl(154) = "ey"
    arrExl(155) = "ez"
    arrExl(156) = "fa"
    arrExl(157) = "fb"
    arrExl(158) = "fc"
    arrExl(159) = "fd"
    arrExl(160) = "fe"
    arrExl(161) = "ff"
    arrExl(162) = "fg"
    arrExl(163) = "fh"
    arrExl(164) = "fi"
    arrExl(165) = "fj"
    arrExl(166) = "fk"
    arrExl(167) = "fl"
    arrExl(168) = "fm"
    arrExl(169) = "fn"
    arrExl(170) = "fo"
    arrExl(171) = "fp"
    arrExl(172) = "fq"
    arrExl(173) = "fr"
    arrExl(174) = "fs"
    arrExl(175) = "ft"
    arrExl(176) = "fu"
    arrExl(177) = "fv"
    arrExl(178) = "fw"
    arrExl(179) = "fx"
    arrExl(180) = "fy"
    arrExl(181) = "fz"
    arrExl(182) = "ga"
    arrExl(183) = "gb"
    arrExl(184) = "gc"
    arrExl(185) = "gd"
    arrExl(186) = "ge"
    arrExl(187) = "gf"
    arrExl(188) = "gg"
    arrExl(189) = "gh"
    arrExl(190) = "gi"
    arrExl(191) = "gj"
    arrExl(192) = "gk"
    arrExl(193) = "gl"
    arrExl(194) = "gm"
    arrExl(195) = "gn"
    arrExl(196) = "go"
    arrExl(197) = "gp"
    arrExl(198) = "gq"
    arrExl(199) = "gr"
    arrExl(200) = "gs"
    arrExl(201) = "gt"
    arrExl(202) = "gu"
    arrExl(203) = "gv"
    arrExl(204) = "gw"
    arrExl(205) = "gx"
    arrExl(206) = "gy"
    arrExl(207) = "gz"
    arrExl(208) = "ha"
    arrExl(209) = "hb"
    arrExl(210) = "hc"
    arrExl(211) = "hd"
    arrExl(212) = "he"
    arrExl(213) = "hf"
    arrExl(214) = "hg"
    arrExl(215) = "hh"
    arrExl(216) = "hi"
    arrExl(217) = "hj"
    arrExl(218) = "hk"
    arrExl(219) = "hl"
    arrExl(220) = "hm"
    arrExl(221) = "hn"
    arrExl(222) = "ho"
    arrExl(223) = "hp"
    arrExl(224) = "hq"
    arrExl(225) = "hr"
    arrExl(226) = "hs"
    arrExl(227) = "ht"
    arrExl(228) = "hu"
    arrExl(229) = "hv"
    arrExl(230) = "hw"
    arrExl(231) = "hx"
    arrExl(232) = "hy"
    arrExl(233) = "hz"
    arrExl(234) = "ia"
    arrExl(235) = "ib"
    arrExl(236) = "ic"
    arrExl(237) = "id"
    arrExl(238) = "ie"
    arrExl(239) = "if"
    arrExl(240) = "ig"
    arrExl(241) = "ih"
    arrExl(242) = "ii"
    arrExl(243) = "ij"
    arrExl(244) = "ik"
    arrExl(245) = "il"
    arrExl(246) = "im"
    arrExl(247) = "in"
    arrExl(248) = "io"
    arrExl(249) = "ip"
    arrExl(250) = "iq"
    arrExl(251) = "ir"
    arrExl(252) = "is"
    arrExl(253) = "it"
    arrExl(254) = "iu"
    arrExl(255) = "iv"
    LoadArrFild = True
    Exit Function
ErrMsg:
    MsgBox Err.Description, vbInformation, "系统提示"
End Function

'----累死我了,本来想弄个循环来填充这个数组,想想,空间都大那么多,时间上咱就别装大方了,直接一
'条一条灌吧。呃~不过上面的代码耍了花招,用EXCEL的编辑功能,呵呵。
'----------------------------------------------------------------------------
'导出EXCEL的函数

'作者:yyhust1

Public Function ImportToExcel(Res As ADODB.Recordset) as Boolean
    Dim myexcel As New Excel.Application
    Dim mybook As New Excel.Workbook
    Dim mysheet As New Excel.Worksheet
    Dim i As Integer

On Error GoTo Emsg
    ImportToExcel=False
    Set mybook = myexcel.Workbooks.Add '添加一个新的BOOK
    Set mysheet = mybook.Worksheets(1)
'关键就是下面这一句,用了CopyFromRecordset方法
    mysheet.Cells.CopyFromRecordset Res
'下面是添加列表头,如果不需要的话可以注释掉。
    myexcel.Rows("1:1").Select
    myexcel.Selection.Insert Shift:=xlDown
    For i = 0 To Res.Fields.Count - 1
        myexcel.Range(arrExl(i) & "1").Select
        myexcel.ActiveCell.FormulaR1C1 = Res.Fields(i).Name
    Next

    myexcel.Visible = True

    ImportToExcel=True
    Set mysheet = Nothing
    Res.Close
    Set Res = Nothing
Emsg:
    MsgBox Err.Description, vbInformation, "系统提示"
    Res.Close
    Set Res = Nothing
    Set mysheet = Nothing
End Function

好了,大家试试吧,速度不赖的。建议如果有一个报表是一个纯记录集(无二次数据处理的情况下),大家导EXCEL时就用这个函数吧。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多