将每月数据上载到Excel中的Access

时间:2013-08-15 10:35:06

标签: excel access-vba recordset

我有一个Access数据库,需要从excel电子表格中获取每月更新。 电子表格具有有意义的列标题,与数据库表不匹配。 另外,我需要检查数据是要合并还是追加。 所以我想从电子表格中获取一个数据集,我可以循环并让我的代码决定如何处理数据。 我可以在Access中创建一个与电子表格结构完全匹配的临时表,用DoCmd.TransferSpreadsheet acImport填充它,做我的东西然后删除它。

这是最简单的方法,还是我可以做的事情:

strQuery = "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" _
   & Chr(34) & fromFile & Chr(34) & "].[sheet1]"

Set rs = CurrentDb.OpenRecordset(strQuery)

此代码产生错误:无法更新。数据库或对象是只读的

2 个答案:

答案 0 :(得分:0)

我认为您需要使用ADO,而不是DOA记录集。 ADO要求您添加引用(除非您使用后期绑定)。 ADO的一些属性和方法与DAO不同,就像ADO中没有.Edit方法一样。

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\Scripts\Test.xls;" & _
        "Extended Properties=""Excel 8.0;HDR=Yes;"";" 

objRecordset.Open "Select * FROM [Sheet1$]", _
    objConnection, adOpenStatic, adLockOptimistic, adCmdText

Do Until objRecordset.EOF
    Wscript.Echo objRecordset.Fields.Item("Name"), _
        objRecordset.Fields.Item("Number")
    objRecordset.MoveNext
Loop

这是从MS的technet网站上获取的,您可以从中获取更多详细信息: http://technet.microsoft.com/en-us/library/ee692882.aspx

答案 1 :(得分:0)

我认为最好在访问中创建新表 然后首先将所有excel数据复制到该表 然后一切都会好起来,而且更快

伊兰