我现在的方法太慢了.用数组的话是很快,但是有的时候导入的数据总是出错.有没有直接把access表的中数据,直接原样的存在excel表的方法,谢谢PS:我用的ado做的,要是可能的话,请给个ado的小例子.谢谢

解决方案 »

  1.   

    某大虾的
    -----------------------
    Visual Basic 导出到 Excel 提速之法 
           Excel 是一个非常优秀的报表制作软件,用VBA可以控制其生成优秀的报表,本文通过添加查询语句的方法,即用Excel中的获取外部数据的功能将数据很快地从一个查询语句中捕获到EXCEL中,比起往每个CELL里写数据的方法提高许多倍。将下文加入到一个模块中,屏幕中调用如下ExporToExcel("select * from table")则实现将其导出到EXCEL中Public Function ExporToExcel(strOpen As String)
    '*********************************************************
    '* 名称:ExporToExcel
    '* 功能:导出数据到EXCEL
    '* 用法:ExporToExcel(sql查询字符串)
    '*********************************************************
    Dim Rs_Data As New ADODB.Recordset
    Dim Irowcount As Integer
    Dim Icolcount As Integer
        
        Dim xlApp As New Excel.Application
        Dim xlBook As Excel.Workbook
        Dim xlSheet As Excel.Worksheet
        Dim xlQuery As Excel.QueryTable
        
        With Rs_Data
            If .State = adStateOpen Then
                .Close
            End If
            .ActiveConnection = Cn
            .CursorLocation = adUseClient
            .CursorType = adOpenStatic
            .LockType = adLockReadOnly
            .Source = strOpen
            .Open
        End With
        With Rs_Data
            If .RecordCount < 1 Then
                MsgBox ("没有记录!")
                Exit Function
            End If
            '记录总数
            Irowcount = .RecordCount
            '字段总数
            Icolcount = .Fields.Count
        End With
        
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = Nothing
        Set xlSheet = Nothing
        Set xlBook = xlApp.Workbooks().Add
        Set xlSheet = xlBook.Worksheets("sheet1")
        xlApp.Visible = True
        
        '添加查询语句,导入EXCEL数据
        Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))
        
        With xlQuery
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = True
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
        End With
        
        xlQuery.FieldNames = True '显示字段名
        xlQuery.Refresh
        
        With xlSheet
            .Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Name = "黑体"
            '设标题为黑体字
            .Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Bold = True
            '标题字体加粗
            .Range(.Cells(1, 1), .Cells(Irowcount + 1, Icolcount)).Borders.LineStyle = xlContinuous
            '设表格边框样式
        End With
        
        With xlSheet.PageSetup
            .LeftHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10公司名称:"   ' & Gsmc
            .CenterHeader = "&""楷体_GB2312,常规""公司人员情况表&""宋体,常规""" & Chr(10) & "&""楷体_GB2312,常规""&10日 期:"
            .RightHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10单位:"
            .LeftFooter = "&""楷体_GB2312,常规""&10制表人:"
            .CenterFooter = "&""楷体_GB2312,常规""&10制表日期:"
            .RightFooter = "&""楷体_GB2312,常规""&10第&P页 共&N页"
        End With
        
        xlApp.Application.Visible = True
        Set xlApp = Nothing  '"交还控制给Excel
        Set xlBook = Nothing
        Set xlSheet = NothingEnd Function
    注:须在程序中引用'Microsoft Excel 9.0 Object Library'和ADO对象,机器必装Excel 2000本程序在Windows 98/2000,VB 6 下运行通过。
      

  2.   

    谢谢楼上.这个我也找到了,但是,运行到这个地方总是提示"DLL出错"    Set xlApp = CreateObject("Excel.Application")不知道是什么原因?
      

  3.   

    问题我找到了...但是原因不明白...谢谢你...我把VB和OFFICE重装后就好用了...
      

  4.   

    出错的原因是你的offic 是精简版的可能没有某个VBA类库
      

  5.   

    最最最快的方法来了.
    根本不要去读那个ACCESS的内容,直接使用ACCESS对象的内置导出功能生成EXCEL报表:1:工程->引用->Microsoft Access Object library
    2:代码:
    Dim ACC As New Access.Application 
    ACC.OpenCurrentDatabase "C:\TEST.MDB"'用ACCESS对象打开C:\TEST.MDB
     '下面这句就是将指定的表Company导出到文件C:\MDB.XLS中
    ACC.DoCmd.OutputTo acOutputTable, "Company", acFormatXLS, "C:\MDB.XLS"
    ACC.CloseCurrentDatabase '关闭数据库
    ACC.Quit 'acQuitSaveNone '关闭ACCESS对象
    Set ACC = Nothing  '释放ACCESS对象你看,其实和操作EXCEL对象是差不多的.
    这下可不要再去数据库里一条一条读再往EXCEL里一格一格写了哦.