|
楼主 |
发表于 2023-1-6 20:02
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
能否帮我看一下,我的这个代码,相关文件都传到6楼了。这个代码实现xls/xlsx格式的没有问题,但不支持CSV。就改ADO文件语句即可。
- Const dizhi As String = "D:\test" '这个路径名最后一定要有一个反斜杠 "\,如果文档目录有改变,这里需要改变"
- 'Const geshiC As String = ".xls" '(如果是2007版,则后缀名改为 *.xlsx)
- Const geshiC As String = ".csv"
- '用的是本地的代码,操作的是本地的CSV文件,链接的是本地的数据库. 只是CSV数据太大,有的100万条一个文件,而且多个,CSV表格式都是一样的,想把数据都汇总到SQL一个表里。感觉用数组会很慢,想直接用数据库方式插入速度会好一些
- Sub 批量导入文件到sql()
- '这个写法如果是xls/xlsx格式的没有问题,两个xls表可以导入,但是改成csv格式文件的,则提示:Error -2147467259(外部表不是预期的格式。),我其实要批量导入的是csv格式的文件。
-
- #If ProjectStatus = "DEV" Then
- Dim cn As ADODB.Connection
- #Else ' assume PROD
- Dim cn As Object
- Set cn = CreateObject("ADODB.Connection")
- #End If
- Dim strSQL As String
- Dim strConn As String
- Dim path As String, fnTemp As String
- Dim FileCount As Integer
- Dim start As Double
- start = Timer() '计算这个程序运行时间。
-
- On Error GoTo test_Error
-
-
- Dim fn, fp
- '关闭屏幕刷新
- Application.ScreenUpdating = False
-
-
- fp = dizhi
- 'fp = ThisWorkbook.path
-
- fn = Dir(fp & "*" & geshiC) '取得第一个工作簿的文件名
- FileCount = 0
- Do While fn <> ""
- Headers = True
-
- path = fp & fn
- fnTemp = Replace(fn, geshiC, "")
- strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";" & "Extended Properties=""Excel 12.0; IMEX=1;HDR=YES""" '这条语句支持xls/xlsx格式文件,不支持CSV格式
- Debug.Print strConn
-
- cn.Open strConn
-
-
- strSQL = "Insert INTO [odbc;Driver={SQL Server};" & _
- "Server=.;Database=test;" & _
- "UID=sa;PWD=sa].test Select 字段一,字段二,字段三,字段四,字段五,字段六 FROM [" & fnTemp & "$] "
-
- 'Debug.Print strSQL
- cn.Execute strSQL
- FileCount = FileCount + 1
- fn = Dir() '取得下一个工作簿的文件名
- cn.Close
-
- Loop '循环
- Set cn = Nothing
- '打开屏幕刷新
- Application.ScreenUpdating = True
- fenzhong = Int(Format(Timer - start, "0.00") / 60)
- MsgBox "程序运行时间约是 " & fenzhong & " 分钟.导入" & FileCount & "CSV文件"
- On Error GoTo 0
- Exit Sub
-
- test_Error:
-
- MsgBox "strSQL=" & strSQL & Chr(10) & " Error " & Err.Number & " (" & Err.Description & ") " & Chr(13) & " fnTemp=" & fnTemp & Chr(13) & "path=" & path & Chr(13) & "strConn=" & strConn
-
- End Sub
复制代码 |
|