使用openxlsx导入多个excel表

Z_D*_*Z_D 5 excel r

我正在尝试将一个大的 xlsx 文件导入到包含许多数据表的 R 中。我试图通过XLConnect,但 java 内存问题(例如本线程中描述的那些已阻止此技术成功。)

相反,我正在尝试使用openxlsx我读过的包,它的工作速度要快得多,并且完全避免使用 Java。但是有没有办法read.xlsx在循环中使用它的函数将所有工作表读入单独的数据帧?我在另一个包中使用的技术不再像 bc 命令那样有效,loadWorkbook()并且getSheets()不能再使用。

感谢您的帮助。

jor*_*ran 6

只需仔细阅读 openxlsx的文档即可快速找到函数sheets(),它声明已弃用该函数以代替names()它返回工作簿中所有工作表的名称。然后,您可以在一个简单的for循环中迭代它们。

我不知道你为什么说loadWorkbook不能使用。同样,文件清楚地显示在功能openxlsx用这个名字,做大致相同的事情在XLConnect,虽然它的观点略有不同。

您还可以查看readxl包,它也没有 Java 依赖项。


ich*_*len 5

我认为该getSheetNames()功能是正确使用的功能。它将为您提供文件中工作表名称的向量。然后,您可以遍历此列表以读取 data.frames 列表。

read_all_sheets = function(xlsxFile, ...) {
  sheet_names = openxlsx::getSheetNames(xlsxFile)
  sheet_list = as.list(rep(NA, length(sheet_names)))
  names(sheet_list) = sheet_names
  for (sn in sheet_names) {
    sheet_list[[sn]] = openxlsx::read.xlsx(xlsxFile, sheet=sn, ...)
  }
  return(sheet_list)
}

read_all_sheets(myxlsxFile)
Run Code Online (Sandbox Code Playgroud)