因为一个项目需要,原始数据全部是Excel文件,包括.xls和.xlsx格式,并且很多excel数据的格式并不规范,一个个转为csv格式不太现实,所以把所有能了解到的读取excel的方法都试了一遍,做个简单汇总。
相关的包:RODBC、xlsx、openxlsx、gdata、readxl,测试平台win7。
RODBC包-相关方法
RODBC-odbcConnectExcel2007()、odbcConnectExcel()、sqlFech()、sqlTables()安装
install.packages(“RODBC”, dependencies=TRUE) #可能需要安装一些依赖包
使用方法
#64位机下,.xls和.xlsx文件用相同方法
library(RODBC)
con <- odbcConnectExcel2007("D:/R/RODBC.xlsx") #64位机下方法
sqlTables(con) #查看该xlsx文件中有哪些表
# TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
# 1 D:\\R\\RODBC.xlsx <NA> 商品信息$ SYSTEM TABLE <NA>
# 2 D:\\R\\RODBC.xlsx <NA> 补充说明$ SYSTEM TABLE <NA>
# 3 D:\\R\\RODBC.xlsx <NA> 销售信息$ SYSTEM TABLE <NA>
table_test <- sqlFetch(con,"销售信息")
table_test
odbcClose(con)
#32位机下,.xls和.xlsx文件主要在方法odbcConnectExcel2007()和odbcConnectExcel()的差异,其余方法相同
con <- odbcConnectExcel ("D:/R/RODBC.xlsx") #
sqlTables(con) #查看该xlsx文件中有哪些表
table_test <- sqlFetch(con,"销售信息")
odbcClose(con)
优缺点说明
RODBC主要是读取数据库的包,是我接触到的读取Excel中效率最高的。并且还有sqlQuery方法可以写SQL灵活读取数据。并且能够同时读取.xls和.xlsx文件。.
在简单比较了各种方法后,觉得RODBC真是神器,并且没有各种乱七八糟的限制,于是欢快地选择了它,事实证明它的确是又快又爽,可是也隐藏了许多潜在的坑爹特性,不深入了解根本没办法发现。如果你有幸看到,说不定可以提前绕过某些坑,或者无法绕过,只能另择新欢。
坑No1.
必须通过Sheet名读取表,一个Excel文件里面可能有多个sheet表,所以你要读取其中某张表,或者所有表,必须提前知道每张表的表名。如下图中的”销售信息”、”商品信息”、”补充说明”。此坑影响不大,并且用sqlTables可以查到表名,可以解决这个问题。
#在表结构相同的情况下,读取所有的表内容
con <- odbcConnectExcel2007("D:/R/RODBC.xlsx") #64位机下方法
tbls <- sqlTables(con)
table_test <- sqlFetch(con, tbls$TABLE_NAME[3])
odbcClose(con)
坑No2.
当某一列有不同类型的数值时,就悲剧了,