使用VBA把EXCEL数据导入数据库
Dim table_Name$
Sub JugeData()
Dim i%, Cnum%, dt$, arry1 () As String, arry2 () As String, arry3 () As String, cnn As Object, rst As Object
cdt = Format(Date, "MMDD")
table_Name = InputBox("请输入数据库表名", "数据库表名", "ygl_temp" & cdt)
Cnum = ActiveSheet.Range("a1"). CurrentRegion.Columns.Count
On Error GoTo errmsg
'定义字段为文本类型
For i = 1 To Cnum
ReDim Preserve arry2(i - 1)
dt = ActiveSheet.Cells(1, i).Value
dt2 = FindDataType(dt )
arry2(i - 1) = dt2 & " varchar2(800)"
Next
'生成建表语句
str1 = Join(arry2, " , " )
str2 = "create table " & table_Name & " (" & str1 & " )"
'MsgBox str2
Set cnn = CreateObject ("ADODB.Connection" )
Set rst = CreateObject ("ADODB.Recordset" )
cnn.Open "Provider=OraOLEDB.Oracle.1;Data Source=cd;User Id=user;Password=password;"
sql = str2
cnn.Execute (sql)
MsgBox "create table OK"
cnn.Close
Set rst = Nothing
Set cnn = Nothing
Call 插入数据
Exit Sub
errmsg:
MsgBox Err.Description, , "错误报告"
End Sub
Function FindDataType(V_cell As String)
'替换标题里的特殊字符
If V_cell = "" Then V_cell = "空的"
If IsNumeric(Left (V_cell, 1 )) = True Then V_cell = "a" & V_cell
If Len(V_cell) >= 15 Then V_cell = Left (V_cell, 14 )
If InStr(V_cell , "/") Then V_cell = Replace (V_cell, "/" , "_")
If InStr(V_cell , "'") Then V_cell = Replace (V_cell, "'" , "")
FindDataType = V_cell
End Function
Sub 插入数据()
Dim tt, arr1(), i% , j%, str$ , arr2(), str2$
tt = Timer
Dim cnn As Object, sql$ , rst As Object
arr1 = ActiveSheet.Range("a1"). CurrentRegion.Value
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
On Error GoTo errmsg
cnn.Open "Provider=OraOLEDB.Oracle.1;Data Source=cd;User Id=stat_yg;Password=yg12345;"
'构造插入语句
sql = "insert into " & table_Name & " values ("
'从第2行开始插入数据
For i = 2 To UBound(arr1, 1)
For j = 1 To UBound (arr1, 2 )
ReDim Preserve arr2(j - 1)
'在单元格内容插入单引号
arr2 (j - 1) = "'" & arr1(i, j ) & "'"
Next
str = Join( arr2, ",")
'执行插入语句
str2 = sql & str & ")"
cnn.Execute (str2)
Next
MsgBox "ok,用了" & Timer - tt & "秒"
cnn.Close
Set cnn = Nothing
Exit Sub
errmsg:
MsgBox Err.Description, , "错误报告"
End Sub
2014.10.21 增加重复字段名处理,字段名含(,(,-的处理,修改插入数据行变量I为LONG类型,解决超过3W行整形数据溢出问题
2014.11.26 增加对字段名包含换行符的处理,对字段名第一个字符为特殊字符的处理,替换2个下划线为1个。![]()
附件列表