近日有同事过来求助,他有一个含有400个sheet的excel文件,由于要汇总数据进行统计,把400个sheet手动合并在一起简直要累死人的节奏;同事十分着急,我说行,先看看再说。
打开excel文件,随便翻看几个sheet的数据,幸运的是每个sheet的信息结构一致:
image这时候记得R里面有个openxlsx包,通过设置sheet编号便可读取对应sheet的数据,查看了openxlsx文档后知道:
Usage
read.xlsx(xlsxFile, sheet = 1, startRow = 1, colNames = TRUE,
rowNames = FALSE, detectDates = FALSE, skipEmptyRows = TRUE,
skipEmptyCols = TRUE, rows = NULL, cols = NULL, check.names = FALSE,
namedRegion = NULL, na.strings = "NA", fillMergedCells = FALSE)
* 参数xlsxFile就是待处理的xlsx文件
* 参数sheet就是待处理xlsx文件的sheet序号
于是,通过read.xlsx()函数再结合for循环,利用9行代码解决了这个问题:
# 载入openxlsx packagelibrary(openxlsx)
# 定义一个空值aa,用以存入后续处理完的数据aa <- NA# 设置循环进度条,便于观察for循环的百分比进展情况pb <- txtProgressBar(min = 0, max = 400, style = 3)# 直接用for循环依次读取400个sheet数据并合并一起for (i in 1:400){ # 读入数据
mydata<-read.xlsx("//...//document.xlsx",i,colNames = F) # 数据合并
aa <- rbind(aa,mydata) # 当前for循环进度展示
setTxtProgressBar(pb,i)
}# 数据导出write.xlsx(aa,"//...//document_etl.xlsx",colNames = TRUE)
由于每个sheet数据不是特别大,for循环400次不到1分钟就全部完成了。
偶然碰到的一个case,把这个小技巧记录下来,希望对你有用哦😄!
网友评论