+ -
当前位置:首页 → 问答吧 → 从excel导入数据到Access

从excel导入数据到Access

时间:2009-08-05

来源:互联网

困扰我好长时间了,请各位高手帮下忙,要求很简单:
就是在ACCESS里有个按钮,可以 把excel表中数据读取到ACCESS 中,
如果当excel表格中【学号】与Access表的【学号】相同,则更新Access表内容,如果没有,则新增数据。

[ 本帖最后由 宏的故事 于 2009-8-5 20:52 编辑 ]

附件

导入excel数据.rar(17.16 KB)

2009-8-5 20:49, 下载次数: 63

作者: 宏的故事   发布时间: 2009-08-05

用链接外部Excel数据和追加查询就可实现。

作者: amolin   发布时间: 2009-08-05

谢谢amolin,不过我需要的是读取excel的代码,因为在这基础上还要添加其他功能,你的方法暂不适用。

作者: 宏的故事   发布时间: 2009-08-05

设计宏,然后把宏另存为VBA代码,在其基础上修改。。。。

作者: amolin   发布时间: 2009-08-05

我这里有一个excel导入Access的代码,你能帮我转换下吗,即从Access读取excel数据

Public Sub 导入数据到ACCESS()
    Dim mydata As String, mytable As String, SQL As String
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim rsx As ADODB.Recordset
    Dim i As Long, n As Long
    mydata = ThisWorkbook.Path & "\成绩.mdb"    '指定数据库
    mytable = "成绩"      '指定数据表
    n = Sheets("Sheet1").Range("A65536").End(xlUp).Row   '指定要保存数据的记录数(行数)
    '建立与数据库的连接
    Set cnn = New ADODB.Connection
    With cnn
        .Provider = "microsoft.jet.oledb.4.0"
        .Open mydata
    End With
    '建立查询
    mysql = "select* from " & mytable
    Set rs = New ADODB.Recordset
    rs.Open mysql, cnn, adOpenKeyset, adLockOptimistic
    For i = 2 To n
        '查询是否已经存在了某条记录
        SQL = "select * from " & mytable & " where 学号='" & Cells(i, 1).Value & "'"
        Set rsx = New ADODB.Recordset
        rsx.Open SQL, cnn, adOpenKeyset, adLockOptimistic
        If rsx.RecordCount = 0 Then
            rsx.AddNew
            For j = 1 To rsx.Fields.Count
                rsx.Fields(Cells(1, j).Value) = Cells(i, j).Value
            Next j
            rsx.Update
        Else
            For j = 2 To rsx.Fields.Count
                rsx.Fields(j - 1) = Cells(i, j).Value
            Next j
            rsx.Update
        End If
    Next i
    MsgBox "数据保存完毕!", vbInformation + vbOKOnly
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set rsx = Nothing
    Set cnn = Nothing
End Sub

作者: 宏的故事   发布时间: 2009-08-05

这样效率和低下。。。。!!按照我的方法。。非常简单。。设计个查询而已。等我又时间再帮你。

作者: amolin   发布时间: 2009-08-05

那先谢谢了。

作者: 宏的故事   发布时间: 2009-08-05

存到D盘。。。。。。

附件

成绩.rar(22.04 KB)

2009-8-5 21:59, 下载次数: 124

作者: amolin   发布时间: 2009-08-05

谢谢啦。
不过我的情况是,不可能只有一张表,每月有60多张excel表,不过格式都一样,如果采用你的方法,那工作量太大了。

作者: 宏的故事   发布时间: 2009-08-05

高手帮忙看看吧!

作者: 宏的故事   发布时间: 2009-08-06

每月有60多张excel表,表格名字有变化吗?如果没有,则可以链接到ACCESS后,用 SQL的UNION连接起来。
总是有办法的。

作者: amolin   发布时间: 2009-08-07

真是高手呀,可惜我暂时看不懂,呵呵。

貌似我也有类似的需求,因为我们公司数据特别多,一直用EXCEL,但眼看行数就快不够用了,目前速度已经很慢了。看来,也要学一下ACCESS与EXCEL之间的数据交换。

作者: aliceshum   发布时间: 2009-12-11

挺有意思的呀,二位的头像,都是小孩,一男娃,一女娃^_^

作者: zhaozyuan   发布时间: 2009-12-12

insert into 表 SELECT * FROM [Excel 5.0;HDR=YES;DATABASE=c:\test.xls].[sheet1$];

作者: bigyoung   发布时间: 2009-12-12

请参考:
DoCmd.TransferSpreadsheet(TransferType, SpreadsheetType, TableName, FileName, HasFieldNames, Range, UseOA)

作者: bigyoung   发布时间: 2009-12-12

参考一下用法,谢谢。

作者: 微积分   发布时间: 2011-05-06