设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2165|回复: 9
打印 上一主题 下一主题

[Access本身] Access导入多个表格遇到的问题

[复制链接]
跳转到指定楼层
1#
发表于 2012-12-11 10:36:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写的一个小工具,在导入多个表格的时候碰到问题了,导入的时候貌似程序找不到表名。只会导入sheet1的内容。主要代码如下:

xlBook.SaveAs FileName:=Application.CurrentProject.Path & "\positions_tmp.xls", FileFormat:=xlNormal, _
            ReadOnlyRecommended:=False, CreateBackup:=False
xlBook.Worksheets.Add
xlBook.Worksheets.Add
tmpFile = Application.CurrentProject.Path & "\positions_tmp.xls"
DoCmd.TransferSpreadsheet acImport, , "table1", tmpFile, True, sheet1
DoCmd.TransferSpreadsheet acImport, , "table2", tmpFile, True, sheet2
DoCmd.TransferSpreadsheet acImport, , "table3", tmpFile, True, sheet3
(以上sheet1这种用具体的赋给的表名代替也不行)

或者用下面这种方法也有问题,它导入了三个文件,生成的三张表表名分别为sheet1, sheet2, sheet3. 但是三张表其实导入的内容都是同一个sheet的。

xl.Visible = True
xl.Workbooks.Open "C:\Documents and Settings\e531825\Desktop\positions_tmp.xls"
With xl
    With .Workbooks(.Workbooks.Count)
        For i = 1 To .Worksheets.Count
            WrksheetName = .Worksheets(i).Name
            DoCmd.TransferSpreadsheet (acImport), acSpreadsheetTypeExcel97, WrksheetName, "C:\Documents and Settings\e531825\Desktop\positions_tmp.xls"
        Next i
    End With
End With
Set xl = Nothing
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
推荐
 楼主| 发表于 2012-12-11 16:04:05 | 只看该作者
todaynew 发表于 2012-12-11 11:53
第三个参数为数据表名称吧?

试试这样搞法:

不行啊版主。它貌似就是认不了这个excel的sheet名称。那个excel文件是这样来的:
1. 用户通过窗口选择一个文件
2. 将文件另存为一个excle,取名为 tmp_position.xls
3. 在这个tmp文件中加入另外两个sheet, 于是现在有了sheet1, sheet2, sheet3.
4. 需要导入3个sheet的数据。

不知道上面的步骤会不会导致这个错误啊
回复 支持 1 反对 0

使用道具 举报

推荐
 楼主| 发表于 2012-12-11 17:13:38 | 只看该作者
todaynew 发表于 2012-12-11 17:09
这样也可以:
   Dim i As Long
    Dim R As String

版主,我发现问题就是在于sheet1, sheet2. sheet3这里。
其实上面的方法可以,但是无论是哪个sheet, 执行语句的时候都只是把sheet(1) - 在工作簿里面的名字是sheet3 - 把这个表的数据导了三遍。不知道为什么会出这个问题。
回复 支持 1 反对 0

使用道具 举报

2#
发表于 2012-12-11 11:53:46 | 只看该作者
本帖最后由 todaynew 于 2012-12-11 16:49 编辑

第三个参数为数据表名称吧?

试试这样搞法:

function 导入E(filename as string,tbname as string,sheetcnt as long)
    '参数:filename--Excel文件(带路径)
    '      tbname--数据表名
    '      sheetcnt--标签总数(标签名为Sheet开头)
    dim ssql as string
    dim i as long
    for i=1 to sheetcnt
          ssql="insert into " & tbname & " select * from [Excel 8.0;DATABASE=" & filename & "].[Sheet" & i &  "$]"
          CurrentDb.Execute ssql
    next
end function
4#
发表于 2012-12-11 16:25:19 | 只看该作者
本帖最后由 todaynew 于 2012-12-11 16:48 编辑
access_beginner 发表于 2012-12-11 16:04
不行啊版主。它貌似就是认不了这个excel的sheet名称。那个excel文件是这样来的:
1. 用户通过窗口选择一 ...





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
发表于 2012-12-11 17:09:32 | 只看该作者
本帖最后由 todaynew 于 2012-12-11 17:12 编辑

这样也可以:
   Dim i As Long
    Dim R As String
    For i = 1 To 3
        R = "Sheet" & i & "$"
        DoCmd.TransferSpreadsheet acImport, , "表1", Me.Application.CurrentProject.Path & "\表.xls", True, R
    Next
    Me.List0.Requery

注意核心语句写法:
DoCmd.TransferSpreadsheet acImport, , "table2", tmpFile, True, "sheet2$"
7#
发表于 2012-12-11 17:37:00 | 只看该作者
本帖最后由 todaynew 于 2012-12-11 17:44 编辑
access_beginner 发表于 2012-12-11 17:13
版主,我发现问题就是在于sheet1, sheet2. sheet3这里。
其实上面的方法可以,但是无论是哪个sheet, 执行 ...

呵呵,榆木脑袋!{:soso_e120:}5楼的答复不是告诉你了吗?
TransferSpreadsheet方法的第5个参数为导入范围,该参数为一个字符串。如果是整个sheet导入的话,可以将该参数写为页的名称,并在其后加一个$符号。比如"sheet2$"、"1月份表$"诸如此类均可。所以你的代码可修改为:
     Dim i As Long
     Dim R As String
     Dim tbname as string
     For i = 1 To 3
         R = "Sheet" & i & "$"
         tbname="table" & i
         DoCmd.TransferSpreadsheet acImport, , tbname, CurrentProject.Path & "\positions_tmp.xls", True, R
     Next

明白了吗?
8#
 楼主| 发表于 2012-12-12 10:42:12 | 只看该作者
todaynew 发表于 2012-12-11 17:37
呵呵,榆木脑袋!5楼的答复不是告诉你了吗?
TransferSpreadsheet方法的第5个参数为导入范 ...

成功了呃!之前木有仔细看5楼的吗,哈哈怎么漏过了。
就是因为"$"的关系。之前我自己 用过"!"说是无效的名称。。
原来应该是加双引号,然后在引号里面加"$"。
多谢版主!
9#
 楼主| 发表于 2012-12-17 14:57:29 | 只看该作者
todaynew 发表于 2012-12-11 17:37
呵呵,榆木脑袋!5楼的答复不是告诉你了吗?
TransferSpreadsheet方法的第5个参数为导入范 ...

版主,版主在吗?
我又遇到一个问题啊。用上面的方法有时候会报错误呃。
DoCmd.TransferSpreadsheet acImport, , "table", myFile, True, "Sheet3$"
错误内容为:
'Sheet3$' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long.
而且经过研究表明,错误发生时都是在已经有excel文件打开的时候。如果有任何一个excel文件打开,那么跑这句话去导入code里面规定的文件就会报错。有什么办法可以解决的呢?
感谢版主指教!
10#
 楼主| 发表于 2012-12-17 15:13:18 | 只看该作者
todaynew 发表于 2012-12-11 17:37
呵呵,榆木脑袋!5楼的答复不是告诉你了吗?
TransferSpreadsheet方法的第5个参数为导入范 ...

好吧版主,已经解决了呃。写代码真的需要灵感啊。
我发现是因为在修改了myfile之后把myfile关掉,然后再用语句导入就没有这个问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-20 19:49 , Processed in 0.098354 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表