请选择 进入手机版 | 继续访问电脑版
楼主: roach
9811 12

[问答] [已解决]用RODBC读入EXCEL表格,表格名称是数字,怎么读 [推广有奖]

  • 0关注
  • 2粉丝

教授

33%

还不是VIP/贵宾

-

威望
0
论坛币
2262 个
通用积分
175.5878
学术水平
5 点
热心指数
11 点
信用等级
3 点
经验
14878 点
帖子
420
精华
0
在线时间
1550 小时
注册时间
2008-4-7
最后登录
2024-4-17

roach 发表于 2013-8-24 23:56:07 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我有多个EXCEL文件,每个文件里有非常多张表格,每个表格都是用数字命名,用RODBC读入的时候碰到了问题
con=odbcConnectExcel2007(sheet)
tbls=sqlTables(con)
result=sqlFetch(con,tbls$TABLE_NAME[1],colnames=FALSE,rownames=FALSE)
比如第一张表格名称是0000,就会出现下面的错误信息
Error in odbcTableExists(channel, sqtable) :
  ‘'0000$'’: table not found on channel

如果把表格名称改成字母,就能成功读入
由于表格实在太多,改名称不太现实,希望高手帮忙解答。另外有没有其他方法读入?已经尝试过xlsreadwirte和xlconnect,文件太大,完全读不了。
拜谢!

附件有一个EXCEL,有兴趣可以试一下

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:excel表格 Excel表 RODBC EXCEL xcel result EXCEL Error 命名 信息

test.xlsx

266.1 KB

gyqznufe 发表于 2013-8-25 00:14:13 |显示全部楼层 |坛友微信交流群
非常感兴趣的问题!
知常容·容乃公·公乃王!
创新源于学、问、思、行、果!
言传身教,请用事实与数据说话!
舍而得之:福、禄、寿、喜、财

使用道具

NoHL 发表于 2013-8-25 00:46:20 |显示全部楼层 |坛友微信交流群
有些软件有这个问题,就是名称的第一个字母/或全部名称不能是数字,否则无法识别
如果实在你无法解决这个问题,给你个方案或许能行
把你的Excel存成2007版本的xlsx格式,改扩展名为.zip 然后用Winrar打开,在xl里面找到workbook.xml这个文件。解压缩这一个文件出来,用记事本打开,你会看到你文件中所有表格的名称,然后一个个改,或者写个程序改(这个文件是XML的),修改完毕后把文件拖回zip里覆盖,再改扩展名回xlsx 就可以看到所有的表格都改了
如果你的表格太多或者文件太大不方便打开操作,可以用这个法子,一般那个workbook很小,几K或者几十K,比打开excel快多了

使用道具

ryusukekenji 发表于 2013-8-25 01:58:20 |显示全部楼层 |坛友微信交流群
方便上载文件?可以尝试使用paste + lapply...

使用道具

roach 发表于 2013-8-25 11:00:31 |显示全部楼层 |坛友微信交流群
ryusukekenji 发表于 2013-8-25 01:58
方便上载文件?可以尝试使用paste + lapply...
传两个工作表上来,你试试,谢谢~~~~

使用道具

roach 发表于 2013-8-25 11:13:03 |显示全部楼层 |坛友微信交流群
NoHL 发表于 2013-8-25 00:46
有些软件有这个问题,就是名称的第一个字母/或全部名称不能是数字,否则无法识别
如果实在你无法解决这个问 ...
手动改不太现实,有上千个表格。
写程序倒是可以试试,应该就是替换sheet name=后面的字符串,我用R处理文字不太行,我研究研究。
不知道您有没有相似的程序,或者有什么思路,十分感谢!

使用道具

ryusukekenji 发表于 2013-8-26 03:24:39 |显示全部楼层 |坛友微信交流群
roach 发表于 2013-8-25 11:00
传两个工作表上来,你试试,谢谢~~~~
  1. require(RODBC)
  2. con <- odbcConnectExcel2007("C:/test.xlsx")
  3. sname <- as.list(c(600000,600004))
  4. ouput <- lapply(1:length(sname),function(i) sqlFetch(con, sname[[i]])[1:5])
复制代码
使用xlsx程序包也行...

使用道具

NoHL 发表于 2013-8-26 06:33:27 |显示全部楼层 |坛友微信交流群
roach 发表于 2013-8-25 11:13
手动改不太现实,有上千个表格。
写程序倒是可以试试,应该就是替换sheet name=后面的字符串,我用R处理 ...
才上千就不能手动改了么。。这都两天了,手动改XML,1分钟一个表都改完了
你可以先这样 XML打开之后用替换
比如 sheet name=“0000” ....sheer name="0001"
替换sheet name=“  成为 sheet name=”A  前面统一加个字母,表格名称统一成为A0000,A0001 看看你的程序能不能认出来,这样一起改还能保持对应不会搞乱
建议还是学个通用点的编程语言,C,或者类C的,比如经济类现在Matlab也流行了,各种统计工具包作图功能也不差,矩阵运算字符处理,文件读写能力,而且网上各种代码也多,类C的拿过来改改语法基本上都能用。。

使用道具

roach 发表于 2013-8-28 22:59:12 |显示全部楼层 |坛友微信交流群
ryusukekenji 发表于 2013-8-26 03:24
使用xlsx程序包也行...
非常感谢,我试一下

使用道具

roach 发表于 2013-8-29 11:37:21 |显示全部楼层 |坛友微信交流群
终于解决了,Excel表格的名称太奇怪了,用sqlTables(con)获取表格名称的时候,Excel会在名称后面加上$和'。
> tbls$TABLE_NAME[1]
[1] " '600000$' "

删除后就能用了
  1. library(RODBC)
  2. sheet="test.xlsx"
  3. con=odbcConnectExcel2007(sheet)
  4. tbls=sqlTables(con)
  5. n=length(tbls$TABLE_NAME)
  6. sname=gsub('\\,'',tbls$TABLE_NAME)
  7. sname=gsub('\'','',sname)
  8. sheets1 <- list()
  9. for(x in 1:n) {
  10.   sheets1[[x]] <- sqlFetch(con, sname[x],colnames=FALSE,rownames=FALSE)
  11.   sheets1[[x]] <- sheets1[[x]][,c(1,2,4)]
  12. }
  13. odbcClose(con)
复制代码



使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 04:09