找回密码
 加入
搜索
查看: 3460|回复: 13

[效率算法] 导出SQLite里的数据到Excel里,是怎么写到表格里的?[已解决]

  [复制链接]
发表于 2016-11-13 21:39:01 | 显示全部楼层 |阅读模式
本帖最后由 heroxianf 于 2016-11-14 10:41 编辑

下面是一行一行的输出,如果不赋值$sOut = ''  那么是一个大的数组,不知道如何写到Excel, 如何定义输出的格式呢? 请指点下哇。

While _SQLite_FetchData($hQuery, $aRow) = $sqlite_ok ;查到有效数据
        For $i = 0 To UBound($aRow) - 1
                $sOut &= $aRow[$i] & ' - '
        Next
        MsgBox(0, '', $sOut, 1)
        $sOut = ''
WEnd
发表于 2016-11-14 09:13:47 | 显示全部楼层
回复 1# heroxianf

一:查看帮助文件
二:搜索论坛例子
三:函数语句如何使用再帮助 
 楼主| 发表于 2016-11-14 10:40:54 | 显示全部楼层
之前想搜这个帖子的,此帖作者整理的UDF里 有详细的方法。

http://www.autoitx.com/forum.php ... hlight=%B8%DF%D0%A7
发表于 2016-11-14 11:13:28 | 显示全部楼层
打开Excel文件直接进入表格直接写就行了
              $wb.activeSheet.name="表名"
        $wb.worksheets(表名).range("a1").resize(UBound($sOut,2),UBound($sOut)).value=$sOut 
发表于 2016-11-14 11:16:33 | 显示全部楼层
回复 3# heroxianf

你的连接那里我也看过并测试过,他是把字段名英文话,感觉有很多SQL文件都要转麻烦。
 楼主| 发表于 2016-11-14 11:22:53 | 显示全部楼层
回复 5# blue_dvd


    谢谢提醒,下来好好了解一下。我本人也喜欢直接写入比较好。
 楼主| 发表于 2016-11-14 13:24:04 | 显示全部楼层
回复 5# blue_dvd


    老兄 你这句没看明白,能提供一下完整的语句么?
发表于 2016-11-14 15:58:08 | 显示全部楼层
Local $sFilePath1 = FileOpenDialog("选择导入电子表格文件", @ScriptDir & "", "Microsoft Excel 工作薄 (*.xls)", 1 + 2 + 4)
    $oexcel=ObjCreate("excel.application") ;创建excel进程
    $oexcel.visible=False  ;隐藏进程界面,可以提高处理速度
    $wb=$oexcel.workbooks.open($sFilePath)  ;打开选定工作簿
  
    ;行列转置才能用
          Local $aArray2[UBound($aArray, 2)][UBound($aArray, 1)]
        For $i = 0 To UBound($aArray, 2) - 1
                For $j = 0 To UBound($aArray, 1) - 1
                        $aArray2[$i][$j] = $aArray[$j][$i]
                Next
        Next
        ;行列转置后放在$aArray2中
    
    $wb.worksheets(1).activate
        $wb.sheets.Add.activate
        
        $wb.activeSheet.name="合并查询结果"
                
        $wb.worksheets("合并查询结果").range("a1").resize(UBound($aArray2,2),UBound($aArray2)).value=$aArray2  ;结果数组写入工作簿第二个工作表
        
        $wb.close(true)  ;保存并关闭工作簿(参数true代表保存)
    $oexcel.quit  ;退出excel进程
把$aArray2改为你的目标数组就可了

评分

参与人数 1金钱 +10 收起 理由
heroxianf + 10 谢谢分享

查看全部评分

 楼主| 发表于 2016-11-14 21:40:43 | 显示全部楼层
回复 8# blue_dvd


    你分享的是把SQLite数据导出来的代码?
发表于 2016-11-14 22:01:30 | 显示全部楼层
回复 9# heroxianf

对,导出来,再存进Excel表格,最近也在玩Excel及SQLite
 楼主| 发表于 2016-11-14 22:42:41 | 显示全部楼层
回复 10# blue_dvd

看不懂了,  我看你这个是打开EXCEL表 存到数组里。
 楼主| 发表于 2016-11-14 22:48:53 | 显示全部楼层
回复 10# blue_dvd


你看看我的代码,要是能这样排列数据就好了,存起来方便。
#AutoIt3Wrapper_UseX64=n
#include <SQLite.au3>
#include <array.au3>
;~ #include <SQLite.dll.au3>

Local $aRow, $hQuery, $sOut = '', $sQuery
Local $hDb = @ScriptDir & '\Monitor.db'

_SQLite_Startup()
ConsoleWrite("SQLite 库版本 = " & _SQLite_LibVersion() & @CRLF)
Local $test = _SQLite_Open($hDb) ; 打开 :内存: 数据库

_SQLite_Query($test, "select * from Monitor;", $hQuery) ;查询表中所有数据

;ConsoleWrite(@CRLF & '下面将输出表中所有数据:')
While _SQLite_FetchData($hQuery, $aRow) = $sqlite_ok ;查到有效数据
        ;行列转置才能用
        Local $aArray2[UBound($aRow, 2)][UBound($aRow, 1)]
        For $i = 0 To UBound($aRow, 2) - 1
                For $j = 0 To UBound($aRow, 1) - 1
                        $aArray2[$i][$j] = $aRow[$j][$i]
                Next
        Next
WEnd

_ArrayDisplay($aArray2)
 楼主| 发表于 2016-11-14 23:59:43 | 显示全部楼层
回复 10# blue_dvd

折腾了这么久,竖着输入的。   请求帮助
   
_SQLite_Query($test, "SELECT * FROM Monitor;", $hQuery)
While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK

        _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aRow, "B1")
        _ArrayDisplay($aRow)

WEnd
发表于 2016-11-15 21:43:50 | 显示全部楼层
回复 13# heroxianf

我没测试结果,不过一般读取Excel数据都是行列倒置的,所有存储的时候也要转制一下再存!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-17 02:57 , Processed in 0.103487 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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