[已解决]AU3连接MYSQL并导出表到excel
本帖最后由 mpf5566 于 2013-9-30 17:24 编辑#include<mysql.au3>
#include<excel.au3>
$dic=ObjCreate("scripting.dictionary")
$oexcel=ObjCreate("excel.application")
$oexcel.visible=True
$sUsername="XX"
$sPassword="xxxxxx"
$sDatabase="ixxxxxx"
$sServer="192.168.xxxxx"
$sDriver="{MySQL ODBC 3.51 Driver}"
$oconnectionobj= _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver)
MsgBox(0,"",$oconnectionobj)
$1=_CountTables($oConnectionObj) ;测试下数据库是否正常连接
MsgBox(0,"",$1);测试结果读出数据库包含正确的tables数说明已正常连接
$sQuery="SELECT * FROM isaLog . SiteA ";高潮来了,如何把数据库整个table的内容导出到excel表格里
$sitea=_Query($oconnectionobj, $sQuery);发送查询命令到数据库中
$wb=$oexcel.workbooks.open(@ScriptDir&"\数据库.xlsx");打开本地excel表格
$wb.worksheets(1).range("a1").resize(500,4).value=$sitea;假设有500行4列的table数据复制到表一内。
希望有做过类似功能的大大给予小弟帮助谢谢。。。。
{:face (394):} select * from table
for $i = 1 to x
_excelwritecall(xx,xx,xx)
next
数据库你都可以连上了,这个我相信你也可以自己搞定的。 mysql不会,ado就知道可以激活指定表后用CopyFromRecordset方法 回复 3# kevinch
机器需要安装一个MySQL ODBC 3.51 Driver 驱动的. 要不然无法连接Mysql数据库.
导出到Excel你可以把查询语句格式化成TAB分割的( select * from yourtablename 返回的数据略作处理,处理成一个字符串,每个字段之间Tab隔开,每行后加换行符. ),然后把返回的结果直接调用Paste方法粘贴到Excel里就行了.很快的.不要用设置单元格数值的,太慢了.
字符串格式为:
local $ResultString="这是第一行第一个字段"&@tab&"这是第一行第二个字段"&....&@crlf & _
"这是第二行第一个字段"&@tab&"这是第二行第二个字段"&....&@crlf & _
.
.
.
.
.
"这是第n行第一个字段"&@tab&"这是第n行第二个字段"&....
然后调用Range("A1").Paste 就可以了. 回复 2# nmgwddj
直接一个一个写入搞定了,谢谢您的提示,不过这样子写入一次数据mysql访问超过了千次以上速度太慢了,现在想换一个方法 回复 4# lanfengc
$query="SELECT * FROM tablename"
$arr= _Query($oConnectionObj, $sQuery)
多谢您的答复,发送mysql UDF的这一条函数到mysql里面返回的$arr变量是什么形式呢?我用_arraydisplay($arr)显示不出什么内容,小弟MYSQL不太熟万请指点谢谢。 回复 3# kevinch
kevinch您好,哈哈这些功能的还是基于之前您给的字典对象来做对比。现在要先连接数据库然后写导入EXCEL再读到字典里。{:face (394):} For $n=0 To UBound($sQuery)-1
$1=_Query($oConnectionObj, $sQuery[$n])
With $1
Local $i=1
;MsgBox(0,"",$s1)
While Not .EOF
Local $resultstring=.fields("Serial").value&@TAB&.fields("Site").value&@TAB&.fields("Description").value
$wb.sheets($s1).range("a"&$i).value=.fields("Serial").value
$wb.sheets($s1).range("b"&$i).value=.fields("Site").value
$wb.sheets($s1).range("c"&$i).value=.fields("Description").value
.movenext
$i+=1
WEnd
$s1+=1回复 4# lanfengc
谢谢您的提示,已经解决了附上赋值说明。。。循环了查询语句,用.fields把所有行每个字段以此读取到excel表里面 可以,不错不错 看不懂呀,学习一下 {:face (396):} 得到了帮助,非常感谢 4楼高手啊!学习了 如果是远程的mysql呢,如何连接 学习了~~~~~~~~~~~
页:
[1]
2