前提:Access 中已建立目標資料表。
Dim conn, conn2, rs, sql
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\book1.mdb"
Set conn2 = CreateObject("ADODB.Connection")
conn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 5.0';Data Source=c:\book1.xls"
sql = "SELECT * FROM [Sheet1$]"
Set rs = conn2.Execute(sql)
Do While Not rs.EOF
sql = "INSERT INTO xxx ([a],[b],[c],[d]) VALUES ('" & FixSQL(rs(0)) & "','" & FixSQL(rs(1)) & "','" & FixSQL(rs(2)) & "','" & FixSQL(rs(3)) & "')"
conn.Execute sql
rs.MoveNext
Loop
conn.Close: Set conn = Nothing
conn2.Close: Set conn2 = Nothing
Function FixSQL(str)
Dim newStr
If IsNull(str) Then newStr = "" Else newStr = Replace(str, "'", "''")
FixSQL = newStr
End Function
利用 OpenDataSource 直接從 Excel 建立資料表並匯入,第一行作為欄位名。
Dim conn, sql
Set conn = CreateObject("ADODB.Connection")
conn.Open "Driver={SQL Server};Server=localhost;UID=sa;PWD=sa;Database=hwtemp;"
sql = "SELECT * INTO newtable FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'Data Source=""c:\book1.xls"";User ID=Admin;Password=;Extended Properties=Excel 5.0')...[Sheet1$]"
conn.Execute sql
conn.Close: Set conn = Nothing
若 Excel 檔案與資料庫不在同一台機器,請參考 Access 導入範例,逐行讀取後用參數化查詢寫入 SQL Server,避免權限與路徑問題。
BULK INSERT 或 SSIS 以提升效能。