在無 Office 環境的 Windows 服務器上,需讀取 Excel 數據導入系統。利用 Windows 內置的 Microsoft.Jet.OLEDB.4.0 驅動 + ADO (ActiveX Data Objects),可將 Excel 作為數據源直接用 SQL 查詢,無需安裝 Office,輕量高效。
Function ReadExcel(myXlsFile, mySheet, my1stCell, myLastCell, blnHeader)
' 參數說明:
' myXlsFile - Excel 文件完整路徑
' mySheet - 工作表名(如 "Sheet1")
' my1stCell - 起始單元格(如 "A1")
' myLastCell - 結束單元格(如 "D100")
' blnHeader - 第一行是否為標題行
Dim arrData, i, j
Dim objExcel, objRS
Dim strHeader, strRange
Const adOpenStatic = 3
' 構建 Extended Properties
If blnHeader Then strHeader = "HDR=YES;" Else strHeader = "HDR=NO;"
' IMEX=1 強制混合類型列按文本讀取,避免數字/文本混合導致空值
strHeader = "Excel 8.0;IMEX=1;" & strHeader
Set objExcel = CreateObject("ADODB.Connection")
objExcel.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myXlsFile & ";Extended Properties=""" & strHeader & """"
Set objRS = CreateObject("ADODB.Recordset")
strRange = mySheet & "$" & my1stCell & ":" & myLastCell ' 如 Sheet1$A1:D100
objRS.Open "Select * from [" & strRange & "]", objExcel, adOpenStatic
i = 0
Do Until objRS.EOF
' 遇到第一列為空則停止(可選邏輯)
If IsNull(objRS.Fields(0).Value) Or Trim(objRS.Fields(0).Value) = "" Then Exit Do
ReDim Preserve arrData(objRS.Fields.Count - 1, i)
For j = 0 To objRS.Fields.Count - 1
If IsNull(objRS.Fields(j).Value) Then
arrData(j, i) = ""
Else
arrData(j, i) = Trim(objRS.Fields(j).Value)
End If
Next
objRS.MoveNext
i = i + 1
Loop
objRS.Close
objExcel.Close
Set objRS = Nothing
Set objExcel = Nothing
ReadExcel = arrData ' 返回二維數組:第一維列,第二維行
End Function
Option Explicit
Dim arrSheet, intCount
' 讀取 Sheet1 A1:B6,含標題行
arrSheet = ReadExcel("ReadExcelTest.xls", "Sheet1", "A1", "B6", True)
For intCount = 0 To UBound(arrSheet, 2)
WScript.Echo arrSheet(0, intCount) & vbTab & arrSheet(1, intCount)
Next
WScript.Echo "==============="
' 讀取 Sheet1 A2:B6,無標題行
arrSheet = ReadExcel("ReadExcelTest.xls", "Sheet1", "A2", "B6", False)
For intCount = 0 To UBound(arrSheet, 2)
WScript.Echo arrSheet(0, intCount) & vbTab & arrSheet(1, intCount)
Next
| 參數 | 作用 | 推薦值 |
|---|---|---|
| HDR | 首行是否列名 | YES/NO |
| IMEX | 導入模式:1=混合類型按文本讀取(關鍵!) | 1 |
| Excel 版本 | Excel 8.0 兼容 .xls;.xlsx 需 ACE 驅動 | Excel 8.0 / Excel 12.0 Xml |
需安裝 Microsoft Access Database Engine (AccessDatabaseEngine.exe),連接字符串修改為:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1"
64 位系統需安裝 64 位 ACE 驅動,且腳本在 64 位 cscript/wscript 下運行。
IMEX=1,強制文本模式。[Column Name]。ADO + Jet/ACE OLEDB 是 Windows 平台無 Office 讀取 Excel 的經典方案,代碼簡潔、性能尚可、部署輕量。關鍵在於 IMEX=1 參數與正確的驅動版本選擇。現代項目建議遷移至 Apache POI (Java)、openpyxl (Python) 等跨平台庫,獲得更強大的功能與穩定性。