存储工作簿的内容以在列表中分隔 data.frames

Store contents of workbook to separate data.frames in a list

我正在尝试读取 Excel 工作簿中的 sheet 数量未知,并将每个 sheet 作为变量的一部分存储(结果 [1] 给出 sheet 1,结果 [2] 给出 sheet 2,等等)。我开始尝试使用 XLConnect 包(我可以在 Linux 上正常工作)找到一种方法来完成它。当我意识到我已经打破了几乎所有的 R 约定时,我停下来了....任何人都有更好的解决方案,使用 XLConnect 包?

require(XLConnect)

demoExcelFile <- system.file("demoFiles/multiregion.xlsx", package = "XLConnect")

endloop<<-F
x<<-1
result<<-NULL
while(!endloop){
  result[x] <<- tryCatch({
    readWorksheetFromFile(demoExcelFile,sheet=x)
    x<<-x+1
  }, error = function(e) {
    endloop<<-T
  })
}

注意:我对使用其他软件包持开放态度,但我一直无法找到另一个可以在 64 位上可靠运行的软件包 Linux Mint

我建议使用 tidyverse 的 readxl。你可以这样写:

library(readxl)
sheets <- excel_sheets("insert_filepath/workbook.xlsx")

data <- list()
for (i in 1:length(sheets)) {
  data[[i]] <- read_excel("insert_filepath/workbook.xlsx", sheet = sheets[i])
}

因为我没有您的 Excel 文件,所以我无法准确地复制您的数据。但这应该是一个通用的解决方案,它在您的 Excel 文件中找到所有 sheet 名称,然后遍历每个 sheet 并将它们读入名为 'data'[=11 的列表中=]

使用具有列出sheet个名字的功能的readxl包。

library(readxl)
library(purrr)

# get the sheet names
sheetnames  <- excel_sheets("path/to/myfile.xlsx")

# loop through them and read each sheet into an item in a list.
# alternatively, use lapply() instead of map()
listofsheets <- map(sheetnames, ~ read_excel("path/to/myfile.xlsx", sheet = .x))
require(XLConnect)

# Load workbook
wb <- loadWorkbook(system.file("demoFiles/multiregion.xlsx", package = "XLConnect"))

# Read all worksheets into a list of data.frames
listOfDfs <- readWorksheet(wb, sheet = getSheets(wb))