read.xls - 读取可变长度的工作表列表及其名称

时间:2013-03-28 11:38:26

标签: r vectorization xls gdata sapply

鉴于多个.xls个文件的页数不同,我使用R包中的read.xls将其读入gdata。我有两个相关问题(解决第二个问题应解决第一个问题):

  1. 事先不知道每个.xls文件有多少张,实际上这个值会因文件而异。
  2. 我需要捕获工作表的名称,这是相关数据
  3. 现在,要解决(1),我正在使用try()并迭代工作表编号,直到我遇到错误。

    如何获取工作表名称列表以便我可以迭代它们?

2 个答案:

答案 0 :(得分:9)

请参阅gdata中的sheetCountsheetNames功能(在同一帮助页面上)。如果xls <- "a.xls",那么,然后将电子表格的所有表格读入列表,每个组件一张,就是这样:

sapply(sheetNames(xls), read.xls, xls = xls, simplify = FALSE)

请注意,组件将使用工作表的名称命名。根据内容,删除simplify = FALSE可能是有意义的。

答案 1 :(得分:8)

对于此类任务,我使用库XLConnect。通过它的功能,您可以在矢量中获取每个工作表的名称,然后确定该矢量的长度。

#Read your workbook 
wb<-loadWorkbook("Your_workbook.xls")

#Save each sheet's name as a vector
lp<-getSheets(wb)

#Now read each sheet as separate list element
dat<-lapply(seq_along(lp),function(i) readWorksheet(wb,sheet=lp[i]))

更新

正如@Martin Studer所建议的,XLConnect函数已经过矢量化,因此无需使用lapply(),而只需提供工作表名称的向量或在getSheets()中使用函数readWorksheet()

dat <- readWorksheet(wb, sheet = getSheets(wb))