阅读Excel工作簿中的所有工作表与data.frames的R列表(Read all workshe

2019-06-18 13:17发布

据我所知, XLConnect可以用来读取Excel工作表为R.例如,这会读一个工作簿中第一个工作表称为test.xls为R.

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

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

如何在工作簿中的所有工作表被导入到R A列表,列表中的每个元素是给定片data.frame,和其中每个元素的名称对应于在Excel工作表的名称?

Answer 1:

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

由于张贴这个问题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文件作为参数和返回每个表中命名列表中的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')


Answer 2:

请注意,大多数的XLConnect的功能已经量化。 这意味着你可以读取一个函数调用的所有工作表,而不必做明确的量化:

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

随着XLConnect 0.2-0 地表温度将已经命名列表。



Answer 3:

由于这是数一击的问题:读多纸张赛过列表:

这里是openxlsx的解决方案:

filename <-"myFilePath"

sheets <- openxlsx::getSheetNames(filename)
SheetList <- lapply(sheets,openxlsx::read.xlsx,xlsxFile=filename)
names(SheetList) <- sheets


Answer 4:

来自官方的readxl (tidyverse)文档(改变第一行):

path <- "data/datasets.xlsx"

path %>% 
  excel_sheets() %>% 
  set_names() %>% 
  map(read_excel, path = path)

详情在: http://readxl.tidyverse.org/articles/articles/readxl-workflows.html#iterate-over-multiple-worksheets-in-a-workbook



Answer 5:

我偶然发现这个老问题,我认为最简单的方法是人仍下落不明。

您可以使用rio导入所有的Excel工作表只用一行代码。

library(rio)
data_list <- import_list("test.xls")

如果你是一个球迷tidyverse ,你可以很容易地通过添加导入它们tibbles setclass参数的函数调用。

data_list <- import_list("test.xls", setclass = "tbl")

假设他们有相同的格式,你可以很容易地通过设置排将它们绑定rbind参数TRUE

data_list <- import_list("test.xls", setclass = "tbl", rbind = TRUE)


Answer 6:

您可以加载的工作簿,然后使用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)})


Answer 7:

excel.link将做的工作。

我居然发现它更容易使用相比,XLConnect(没有,要么包是很难用)。 两个学习曲线是5分钟左右。

顺便说一句,你可以很容易地发现,通过浏览提及“创先争优”所有的R包http://cran.r-project.org/web/packages/available_packages_by_name.html



Answer 8:

我想上面的,并与我的20MB的Excel我需要转换包括的数据量问题; 因此上述没有为我工作。

更多的研究后,我偶然发现了openxlsx而这一次终于做的伎俩(快速) 导入大XLSX文件为R?

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



Answer 9:

为了从工作簿读取多个片材,按如下方式使用readxl包:

library(readxl)
library(dplyr)

final_dataFrame <- bind_row(path_to_workbook %>%
                              excel_sheets() %>%
                              set_names() %>%
                              map(read_excel, path = path_to_workbook))

这里,bind_row(dplyr)会把所有的数据行从所有片材到一个数据帧,并path_to_workbook是“DIR /该/数据/工作簿/的”。



文章来源: Read all worksheets in an Excel workbook into an R list with data.frames