本文示範如何使用 VBScript(.vbs)透過 ODBC 連接 MySQL,查詢資料並自動寫入新建的 Excel 檔案,適合 Windows 環境下的輕量級資料匯出自動化需求。
MySQL Connector/ODBC)。MySQL ODBC 5.3 Unicode Driver,填入 Server、Port、Database、UID、PWD。'--- 1. 連接 MySQL ---
StrCnn = "Provider=MSDASQL.1;Persist Security Info=True;" & _
"Extended Properties='Driver=MySQL ODBC 5.3 Unicode Driver;" & _
"SERVER=188.1.1.132;UID=grute;PWD=grute;DATABASE=grute;PORT=3307'"
Set Cnn = CreateObject("ADODB.Connection")
Cnn.Open StrCnn
If Cnn.State = 0 Then MsgBox "資料庫連線失敗" : WScript.Quit
'--- 2. 建立 Excel ---
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Add()
Set oSheet = oExcel.ActiveSheet
'--- 3. 執行查詢 ---
strQuery = "SELECT * FROM test"
Set rs = Cnn.Execute(strQuery)
'--- 4. 寫入標題列 ---
arrCol = Array("序號", "姓名", "用戶名", "密碼", "權限")
For k = 0 To UBound(arrCol)
oSheet.Cells(1, k+1).Value = arrCol(k)
Next
'--- 5. 迴圈寫入資料列 ---
i = 1
If Not rs.BOF Then
Do While Not rs.EOF
i = i + 1
For k = 0 To UBound(arrCol)
oSheet.Cells(i, k+1).Value = rs(arrCol(k))
Next
rs.MoveNext
Loop
Else
WScript.Echo "查無資料"
End If
'--- 6. 存檔與清理 ---
oExcel.ActiveWorkbook.SaveAs "C:\Users\Administrator\Desktop\test.xlsx"
oExcel.Quit
rs.Close
Cnn.Close
Set Cnn = Nothing
MsgBox "導出完成"
Extended Properties 內需用單引號包裹 Driver 參數,雙引號跳脫需注意。arrCol 順序必須與 SELECT * 回傳欄位順序一致,建議改為明確列出欄位名 SELECT id, name, ... 避免結構變更導致錯位。Quit → Close → Set Nothing,避免殘留 EXCEL.EXE 進程。On Error Resume Next 與錯誤日誌記錄。將下列碼存為 export_mysql_to_excel.vbs,雙擊即可執行(需依實際環境修改 IP、帳密、資料庫、表名、欄位、存檔路徑):
Dim Cnn, rs, strCnn, i, arrCol
arrCol = Array("序號", "姓名", "用戶名", "密碼", "權限")
strCnn = "Provider=MSDASQL.1;Persist Security Info=True;" & _
"Extended Properties='Driver=MySQL ODBC 5.3 Unicode Driver;" & _
"SERVER=188.1.1.132;UID=grute;PWD=grute;DATABASE=grute;PORT=3307'"
Set Cnn = CreateObject("ADODB.Connection")
Cnn.Open strCnn
If Cnn.State = 0 Then MsgBox "連線失敗" : WScript.Quit
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Add()
strQuery = "SELECT * FROM test"
Set rs = Cnn.Execute(strQuery)
' 寫入標題
For k = 0 To UBound(arrCol)
oExcel.Cells(1, k+1).Value = arrCol(k)
Next
i = 1
If Not rs.BOF Then
Do While Not rs.EOF
i = i + 1
For k = 0 To UBound(arrCol)
oExcel.Cells(i, k+1).Value = rs(arrCol(k))
Next
rs.MoveNext
Loop
End If
oExcel.ActiveWorkbook.SaveAs "C:\Users\Administrator\Desktop\test.xlsx"
oExcel.Quit
rs.Close
Cnn.Close
Set Cnn = Nothing
MsgBox "導入完成"
此方案無需安裝額外程式語言環境,利用 Windows 內建 WSH 執行,適合排程任務或臨時匯出需求。