将Excel工作簿中的所有工作表都读取到一个包含数据框的R列表中。

22 浏览
0 Comments

将Excel工作簿中的所有工作表都读取到一个包含数据框的R列表中。

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

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

我有一个包含多个工作表的Excel工作簿。

如何将工作簿中的所有工作表导入R中的一个列表中,其中列表的每个元素都是一个特定工作表的数据框,并且每个元素的名称对应于Excel中工作表的名称?

admin 更改状态以发布 2023年5月22日
0
0 Comments

注意,XLConnect的大多数功能已经向量化。这意味着您可以使用一次函数调用读取所有工作表,而无需进行明确的向量化:

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

使用XLConnect 0.2-0,lst将已经是一个带名称的列表。

0
0 Comments

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

自从发布这个问题以来,已经推出了readxl包。它支持xlsxlsx格式。与其他excel导入包不同的是,它可以在Windows、Mac和Linux上使用,而不需要安装其他软件。

因此,导入Excel工作簿中的所有工作表的函数如下:

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
}

这可以这样调用:

mysheets <- read_excel_allsheets("foo.xls")

旧答案

在@mnel提供的答案的基础上,这里有一个简单的函数,它以Excel文件作为参数,并将每个工作表作为命名列表中的数据框返回。

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')

0