bnuzjm 发表于 2013-8-7 14:22:22

求access导出excel和dbf的函数

本帖最后由 bnuzjm 于 2013-8-7 19:16 编辑

各位大侠,有没有直接将access中的表导出成excel和dbf的函数?找了好久,基本上都是遍历表中的数据,然后插入到excel或者dbf中,有没有现成的导出函数么?

自己写了两个函数,excel 导出见1楼,dbf导出见2楼,两个函数差不多。解决方案还是不够好,希望有大侠能够有更好的解决方案。

bnuzjm 发表于 2013-8-7 18:21:25

导出excel的已经解决了Func _exportExcel()
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
        $sQuery="select * from datahsd"
        $RS =ObjCreate("ADODB.Recordset")
        $RS.ActiveConnection =$addfld       
        $RS.open($sQuery)

        Local $intCount = $RS.Fields.Count
        $oExcel = _ExcelBookNew(0) ; Create an Excel Object
        $oExcel.WorkBooks.Add ; Add a new workbook
        For $i = 1 to $intCount Step + 1
                $oExcel.ActiveWorkBook.ActiveSheet.Cells(1, $i).value = $RS.Fields($i - 1).name
        Next
        $oExcel.ActiveWorkBook.ActiveSheet.Cells(2,1).CopyFromRecordset ($RS) ; Fill a cell
        $oExcel.Columns.AutoFit
        $oExcel.ActiveWorkBook.Saved = 1 ; Simulate a save of the Workbook
        _ExcelBookSaveAs($oExcel, 'D:\code\autoit\example\录取数据处理系统\test\098\cwc.xls', "xls", 0, 1)
        _ExcelBookClose($oExcel)
        $oExcel=0
EndFunc

bnuzjm 发表于 2013-8-7 19:15:06

本帖最后由 bnuzjm 于 2013-8-7 20:39 编辑

把excel.au3修改了下,加上dbf类型判断。测试了下,xp系统,只支持dbf4类型,dbf2和dbf3都不支持。
win7系统,三个都不支持,所以这个方案还是有挺多问题的
_export("d:\","文件名1","xls")
_export("d:\","文件名2","dbf")

Func _export($targetPath,$fileName,$fileType)
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
        $sQuery="select * from datahsd"
        $RS =ObjCreate("ADODB.Recordset")
        $RS.ActiveConnection =$addfld       
        $RS.open($sQuery)

        Local $intCount = $RS.Fields.Count
        $oExcel = _ExcelBookNew(0) ; Create an Excel Object
        $oExcel.WorkBooks.Add ; Add a new workbook
        For $i = 1 to $intCount Step + 1
                $oExcel.ActiveWorkBook.ActiveSheet.Cells(1, $i).value = $RS.Fields($i - 1).name
        Next
        $oExcel.ActiveWorkBook.ActiveSheet.Cells(2,1).CopyFromRecordset ($RS) ; Fill a cell
        $oExcel.Columns.AutoFit
        $oExcel.ActiveWorkBook.Saved = 1 ; Simulate a save of the Workbook
        _ExcelBookSaveAs($oExcel, $targetPath&$fileName&"."&$fileType, $fileType, 0, 1)
        If $fileType="xls" Then
                _ExcelBookClose($oExcel)
                $oExcel=0               
        Else
                ProcessClose("excel.exe")
        EndIf
EndFunc

bnuzjm 发表于 2013-8-7 21:11:33

本帖最后由 bnuzjm 于 2013-8-7 21:13 编辑

另外再附上excel.au3中保存类型的参数值对应表,可能对大家有用。
其中我用到了DBF4 (2)   (*.DBF) dBase IV   11

quintin 发表于 2013-8-10 14:46:58

当数据量大的时候会不会效率很低?

gczxhzb 发表于 2013-8-10 15:45:22

这个要好好研究的,将来一定有用

huangwei 发表于 2013-8-10 19:14:31

是所有的导出函数?

bnuzjm 发表于 2013-8-11 10:34:59

回复 5# quintin


    是有点低

bnuzjm 发表于 2013-8-11 10:37:52

回复 7# huangwei

这是ExcelCOM_UDF.au3里面的代码,目前只支持以下几种类型吧,dbf是我自己加上去的
Func _ExcelBookSaveAs($oExcel, $sFilePath, $sType = "xls", $fAlerts = 0, $fOverWrite = 0)
        If NOT IsObj($oExcel) Then Return SetError(1, 0, 0)
        If $sType = "xls" or $sType = "csv" or $sType = "txt" or $sType = "template" or $sType = "html" or $sType = "dbf" Then
                If $sType = "xls" Then $sType = $xlNormal
                If $sType = "csv" Then $sType = $xlCSVMSDOS
                If $sType = "txt" Then $sType = $xlTextWindows
                If $sType = "template" Then $sType = $xlTemplate
                If $sType = "html" Then $sType = $xlHtml
                If $sType = "dbf" Then $sType = $xlDbf4
        Else

netegg 发表于 2013-8-11 16:00:46

看看sqlite吧

bnuzjm 发表于 2013-8-12 13:41:18

回复 10# netegg

因为跟其他系统对接,用access会更方便点

netegg 发表于 2013-8-12 23:21:41

回复 12# bnuzjm

sqlite本身就是跨平台的
页: [1]
查看完整版本: 求access导出excel和dbf的函数