使用data.frames将Excel工作簿中的所有工作表读取到R列表中

我知道可以使用XLConnect将Excel工作表读入R.例如,这将读取名为test.xls的工作簿中的第一个工作表导入R.

 library(XLConnect) readWorksheetFromFile('test.xls', sheet = 1) 

我有一个Excel工作簿与多个工作表。

如何将工作簿中的所有工作表导入到R中的列表中,其中列表中的每个元素都是给定工作表的data.frame,每个元素的名称与Excel中工作表的名称相对应?

请注意,大部分XLConnect的function已经被vector化了。 这意味着您可以使用一个函数调用读取所有工作表,而无需执行显式vector化:

 require(XLConnect) wb <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect")) lst = readWorksheet(wb, sheet = getSheets(wb)) 

随着XLConnect 0.2-0 lst将已经是一个名单。

使用readxl更新答案(2015年6月22日)

自发布这个问题以来, readxl软件包已经发布。 它支持xlsxlsx格式。 重要的是,与其他Excel导入包相比,它可以在Windows,Mac和Linux上工作,而无需安装额外的软件。

因此,导入Excel工作簿中所有工作表的function是:

 library(readxl) read_excel_allsheets <- function(filename) { sheets <- readxl::excel_sheets(filename) x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X)) names(x) <- sheets x } 

这可以被称为:

 mysheets <- read_excel_allsheets("foo.xls") 

老答案

build立在@mnel提供的答案上,这是一个简单的函数,它将Excel文件作为参数,并将每个工作表作为一个data.frame返回到一个已命名的列表中。

 library(XLConnect) importWorksheets <- function(filename) { # filename: name of Excel file workbook <- loadWorkbook(filename) sheet_names <- getSheets(workbook) names(sheet_names) <- sheet_names sheet_list <- lapply(sheet_names, function(.sheet){ readWorksheet(object=workbook, .sheet)}) } 

因此,它可以被称为:

 importWorksheets('test.xls') 

您可以加载工作簿,然后使用lapplygetSheetsreadWorksheet并执行类似的操作。

 wb.mtcars <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect")) sheet_names <- getSheets(wb.mtcars) names(sheet_names) <- sheet_names sheet_list <- lapply(sheet_names, function(.sheet){ readWorksheet(object=wb.mtcars, .sheet)}) 

excel.link将完成这项工作。

实际上我发现与XLConnect相比更容易使用(不是那个包很难使用)。 两者的学习曲线约为5分钟。

另外,通过浏览http://cran.r-project.org/web/packages/available_packages_by_name.html ,您可以轻松find所有提到“Excel”这个单词的R包。

我尝试了以上,并有我的20MB Excel我需要转换的数据量包括的问题; 因此上述不适合我。

经过更多的研究,我偶然发现了openxlsx,这个终于做了(而且快)把一个大的xlsx文件导入R?

https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf