将EXCEL文件导入数据库
打开一个EXCEL文件AA。XLS,修改、保存但没有关闭
如何将当前这个文件导入数据库
问题点数:50、回复次数:14Top
1 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-06 09:30:49 得分 40
你导入的是Access还是SQL?Top
2 楼1410104(兔子)回复于 2006-03-06 09:34:27 得分 0
SQLTop
3 楼tongiii(索罗·希尔)回复于 2006-03-06 09:35:14 得分 5
'用ADODB打开Excel文件,用OpenSchema方法获得Excel文件中的工作表
'还要加参数使首行不作为字段名,使所有数据都作为文本类型
Dim strConn As String
'strConn = "Provider = MSDASQL;Driver={Microsoft Excel Driver (*.xls)};DBQ=" & xlsFile
'strConn = strConn & ";IMEX=1"
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & xlsFile & ";" & "Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""
connExcel.ConnectionString = strConn
connExcel.Open
Set rsTables = connExcel.OpenSchema(adSchemaTables)
If rsTables.EOF Then
MsgBox "无法打开Excel文件!文件格式可能不正确!"
Exit Function
End If
table_name = rsTables("TABLE_NAME").Value
rsTables.Close
'第一行作为字段名,读不到第一行
table_name = "[" & table_name & "]"
rsExcel.Open "select * from " & table_name, connExcel
'......
Top
4 楼tongiii(索罗·希尔)回复于 2006-03-06 09:37:14 得分 0
使用ADO可以在不安装Excel的情况下读取Excel文件Top
5 楼1410104(兔子)回复于 2006-03-06 09:41:07 得分 0
如果这个文件当前是打开的,能导入吗?Top
6 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-06 10:11:05 得分 0
下面这个,可以实现你的要求:
'用ado实现
'工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)
Private Sub Command1_Click()
Dim cn As New ADODB.Connection
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & App.Path & "\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"
cn.Execute ("insert INTO [odbc;Driver={SQL Server};" & _
"Server=ljx;Database=testDB;" & _
"UID=sa;PWD=].testTable" & _
"select * FROM [Sheet1$]")
cn.Close
Set cn = Nothing
End SubTop
7 楼vansoft(Vansoft Workroom)回复于 2006-03-06 10:32:01 得分 5
是文件,還是文件內的數據啊?
文件的話,不關閉是放不進數據庫的。
文件內的數據的話,可以用VBA,寫個導入SQL語句直接就導進去了。Top
8 楼1410104(兔子)回复于 2006-03-06 10:57:19 得分 0
是文件,因为里面还有格式的和数据链接之类的东西,这个是一个群里的朋友昨天问我的,我也认为是如果文件不关闭,应该是不将文件导入数据库的
如果采用保存加另存为的方式不知道行不行Top
9 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-06 11:09:21 得分 0
另存的方式肯定可以的,因为保存的是那个另存的文件
不关闭文件应该也可以(以二进制方式读取)Top
10 楼1410104(兔子)回复于 2006-03-06 11:21:55 得分 0
不关闭的话,我试过,我用的是adodb.stream 然后type= adTypeBinary '二进制模式
但保存的时候就会出错,提示导入文件错误
关闭后再导入就没有问题
用你的方法在不关闭文件的情况下可行吗
我试了下cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source= " & App.Path & "\test.xls;Extended Properties='Excel 8.0;HDR=Yes' "这句出错了提示,找不到可安装的ISAMTop
11 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-06 13:25:11 得分 0
上面的代码,是保存文件里的数据,并不是保存文件,下面给出保存文件的方法(可以不关闭文件):
Private Sub Form_Load()
Dim cn As New ADODB.Connection
cn.CursorLocation = adUseClient
'具体的数据库连接请自己改过来
cn.Open "Provider=SQLOLEDB.1;Password=;Persist Security Info=False;User ID=sa;Initial Catalog=Test;Data Source=ljx"
End Sub
Private Sub cmdSaveFile_Click()
saveFile
End Sub
Private Sub cmdReadFile_Click()
readFile
End Sub
'保存xls文件到数据库
Private Sub saveFile()
Dim tmp() As Byte
Dim lngFile As Long
Dim rs As New ADODB.Recordset
rs.Open "select * from test where 1<>1", cn, adOpenDynamic, adLockOptimistic
lngFile = FreeFile
Open App.Path & "\test.xls" For Binary As #lngFile
ReDim tmp(LOF(lngFile))
Get #lngFile, , tmp
Close #lngFile
rs.AddNew
rs.Fields(0).Value = tmp
rs.Update
rs.Close
Set rs = Nothing
End Sub
'读取数据库的xls文件,保存到硬盘
Private Sub readFile()
Dim tmp() As Byte
Dim rs As New ADODB.Recordset
rs.Open "select * from test ", cn
ReDim tmp(rs.Fields(0).ActualSize) '返回2进制文件的字节长度
tmp = rs.Fields(0).Value
Open App.Path & "\NewExcel.xls" For Binary As #1
Put #1, , tmp
Close #1
rs.Close
Set rs = Nothing
End SubTop
12 楼1410104(兔子)回复于 2006-03-06 14:15:24 得分 0
非常感谢faysky,还有个问题要请教下,我打开EXCEL文件后,如何让这个文件高亮Top
13 楼1410104(兔子)回复于 2006-03-06 15:53:11 得分 0
帮忙看下呢,兄弟Top
14 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-06 16:20:35 得分 0
你说的文件高亮是什么样子?只是让它获得焦点吗?Top




