R语言读取Excel文件

本文总结了R语言中读取Excel文件的多种方法,包括RODBC、xlsx、openxlsx、gdata和readxl包,分析了各自的优缺点。RODBC效率高但有坑,如需读取所有sheet或处理混合类型数据时会出现问题;xlsx和openxlsx能解决类型问题但效率较低;gdata和readxl各有优势,但gdata可能因Perl编码问题处理中文字符时出错,readxl不支持.xls文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为一个项目需要,原始数据全部是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.

当某一列有不同类型的数值时,就悲剧了,如下例子中,用RODBC读入不能指定读入数据

### 使用 `readxl` 和 `openxlsx` 包读取 Excel 文件 #### 安装必要的包 为了能够顺利读取 Excel 文件,在 R 中需要安装并加载特定的软件包。对于此目的,可以使用 `readxl` 或者 `openxlsx`。 ```r install.packages("readxl") install.packages("openxlsx") library(readxl) library(openxlsx) ``` #### 使用 `readxl` 读取 Excel 文件 `read_excel()` 函数提供了简单易用的方式来导入 .xls 或 .xlsx 格式的文件。可以通过指定工作表名称或编号来选择要读取的工作表[^1]。 ```r # 基于工作表名读取数据 data <- read_excel("path/to/your/file.xlsx", sheet = "SheetName") # 或基于索引位置读取第一个工作表的数据 data <- read_excel("path/to/your/file.xlsx", sheet = 1) # 设置起始行和列 data <- read_excel("path/to/your/file.xlsx", sheet = "SheetName", range = "A5:B10") ``` #### 使用 `openxlsx` 读取 Excel 文件 `openxlsx` 提供了一个更灵活的方式处理 Excel 文件,支持更多高级功能。同样允许通过设置参数如 `startRow`, `endRow`, `startCol`, `endCol` 来精确控制读取范围。 ```r # 加载整个工作簿对象 wb <- loadWorkbook("path/to/your/file.xlsx") # 获取所有可用的工作表列表 sheet_names <- getSheets(wb) # 读取单个工作表的内容到 DataFrame data <- readWorksheet(wb, sheet = "SheetName") # 自定义读取区域 data_custom_range <- read.xlsx("path/to/your/file.xlsx", sheet = "SheetName", startRow = 5, colNames = TRUE, rows = seq(5, 10), cols = c("A", "B")) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值