library(readxl)
read_excel_allsheets <- function(filename, tibble = FALSE) {
# I prefer straight data.frames
# but if you like tidyverse tibbles (the default with read_excel)
# then just pass tibble = TRUE
sheets <- readxl::excel_sheets(filename)
x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
if(!tibble) x <- lapply(x, as.data.frame)
names(x) <- sheets
x
}
9 回答
使用readxl更新答案(2015年6月22日)
自发布此问题以来,
readxl
包已发布 . 它支持xls
和xlsx
格式 . 重要的是,与其他excel导入包相比,它适用于Windows,Mac和Linux,无需安装其他软件 .因此,导入Excel工作簿中的所有工作表的功能将是:
这可以通过以下方式调用:
旧答案
在@mnel提供的答案的基础上,这是一个简单的函数,它将Excel文件作为参数,并将每个工作表作为data.frame返回到命名列表中 .
因此,它可以通过以下方式调用:
请注意,大多数XLConnect的函数已经过矢量化 . 这意味着您可以使用一个函数调用读入所有工作表,而无需进行显式向量化:
使用XLConnect 0.2-0 lst将已经是一个命名列表 .
由于这是问题的第一个:阅读多表excel列出:
这是
openxlsx
解决方案:从官方
readxl
(tidyverse)文档(更改第一行):详细信息:http://readxl.tidyverse.org/articles/articles/readxl-workflows.html#iterate-over-multiple-worksheets-in-a-workbook
您可以加载工作簿,然后使用
lapply
,getSheets
和readWorksheet
并执行类似的操作 .我偶然发现了这个老问题,我认为最简单的方法仍然缺失 .
您只需使用一行代码就可以使用
rio
导入所有Excel工作表 .如果您是
tidyverse
的粉丝,可以通过在函数调用中添加setclass
参数轻松地将它们作为元素导入 .假设它们具有相同的格式,您可以通过将
rbind
参数设置为TRUE
来轻松地对它们进行行绑定 .excel.link将完成这项工作 .
实际上我发现与XLConnect相比它更容易使用(并不是说任何一个包很难使用) . 两者的学习曲线大约是5分钟 .
顺便说一句,您可以通过浏览http://cran.r-project.org/web/packages/available_packages_by_name.html轻松找到所有提及单词"Excel"的R包 .
我尝试了上述内容,并且我需要转换的20MB Excel数据量存在问题;因此以上对我不起作用 .
经过更多的研究,我偶然发现了openxlsx,这个终于完成了诀窍(并且快速)Importing a big xlsx file into R?
https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf
要从工作簿中读取多个工作表,请使用readxl包,如下所示:
这里,bind_row(dplyr)将所有工作表中的所有数据行放入一个数据框,path_to_workbook为“dir / of / data / workbook” .