问题

我的Excel文档my.xlsx有两个名为Sheet1和Sheet2的表.我想使用fread函数从data.table R包读取Excel工作簿中的所有工作表.以下代码只读取活动工作表.想知道如何在不知道其名称的情况下读取所有工作表.谢谢

 df3 <- data.table::fread("in2csv my.xlsx")
> names(df3)
[1] "A" "B"
> df3
   A  B
1: 1  2
2: 2  4
3: 3  6
4: 4  8
5: 5 10
 

  最佳答案

我使用openxlsx::read.xlsx最后一次我需要从XLSX读取许多表.

 #install.packages("openxlsx")
library(openxlsx)
#?openxlsx::read.xlsx

#using file chooser:
filename <- file.choose()
#or hard coded file name:
#filename <- "filename.xlsx"

#get all the sheet names from the workbook
SheetNames<-getSheetNames(filename)

# loop through each sheet in the workbook
for (i in SheetNames){

  #Read the i'th sheet
  tmp_sheet<-openxlsx::read.xlsx(filename, i)

  #if the input file exists, append the new data;; else use the first sheet to initialize the input file
  ifelse(exists("input"),
         input<-rbind(input, tmp_sheet),
         input<-tmp_sheet)
}
 

注意:这假设每个工作表具有相同的列结构和数据类型.您可能需要将数据标准化(例如,tmp_sheet <- as.data.frame(sapply(tmp_sheet,as.character), stringsAsFactors=FALSE)),或者在合并之前将每个工作表加载到自己的数据帧和预处理中.

  相同标签的其他问题

rexceldata.table