找回密码
 加入
搜索
查看: 16114|回复: 12

[AU3基础] 求access导出excel和dbf的函数

  [复制链接]
发表于 2013-8-7 14:22:22 | 显示全部楼层 |阅读模式
本帖最后由 bnuzjm 于 2013-8-7 19:16 编辑

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

自己写了两个函数,excel 导出见1楼,dbf导出见2楼,两个函数差不多。解决方案还是不够好,希望有大侠能够有更好的解决方案。
 楼主| 发表于 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
 楼主| 发表于 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
 楼主| 发表于 2013-8-7 21:11:33 | 显示全部楼层
本帖最后由 bnuzjm 于 2013-8-7 21:13 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2013-8-10 14:46:58 | 显示全部楼层
当数据量大的时候会不会效率很低?
发表于 2013-8-10 15:45:22 | 显示全部楼层
这个要好好研究的,将来一定有用
发表于 2013-8-10 19:14:31 | 显示全部楼层
是所有的导出函数?
 楼主| 发表于 2013-8-11 10:34:59 | 显示全部楼层
回复 5# quintin


    是有点低
 楼主| 发表于 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
发表于 2013-8-11 16:00:46 | 显示全部楼层
看看sqlite吧
 楼主| 发表于 2013-8-12 13:41:18 | 显示全部楼层
回复 10# netegg

因为跟其他系统对接,用access会更方便点
发表于 2013-8-12 23:21:41 | 显示全部楼层
回复 12# bnuzjm

sqlite本身就是跨平台的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 03:32 , Processed in 0.117009 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表