帮一个朋友做东西,分析处理excel的文件。网上查询了一下,感觉用R或者matlab处理都可以,R语言比较灵活,免费开源,所以选择了用R语言来写脚本。
开始是尝试了xlsx的packages,效果不是很理想。一是需要配置rjava,xlsxjars和xlsx三个包,其中rjava在mac上有很多坑,对R,java和Mac系统的版本都有一些硬性的要求,配置起来很容易遇到坑;其二是xlsx的加载能力很弱,基于java实现,基本2,30MB的xlsx就溢出了,不太符合要求。
后来改用openxlsx,感觉一下鸟枪换炮了,配置很简单,一行代码就搞定了;然后加载能力也相当可以,加载200MB的xlsx也完全没问题。
以下为比较简单的case:
library(openxlsx)
#sheetNo控制提取表的页号
sheetNo <- 1
#原始数据文件路径
bigdataFile <- "E:/MoveData/BigData.xlsx"
#提取文件路径
targetFile <- "E:/MoveData/Target.xlsx"
#读取文件
bigdata <- read.xlsx(xlsxFile=bigdataFile,sheet=1,colName = FALSE,rowName=FALSE)
target <- read.xlsx(xlsxFile=targetFile,sheet=sheetNo,colName = FALSE,rowName=FALSE)
#新建提取数据的xlsx表
sheetName <- "TNBC"
wb = createWorkbook()
addWorksheet(wb,sheetName)
rowNum <- dim(bigdata)[1]
writeData(wb,sheetName,bigdata[10:rowNum,1],startRow=2,startCol=1,colName=FALSE)
writeData(wb,sheetName,target[1,],startRow=1,startCol=1,colName=FALSE)
for (i in 2 : dim(target)[2])
{
nameT <- target[1,i]
for (j in 2 : dim(bigdata)[2])
{
nameB <- bigdata[5,j]
if (grepl(nameT,nameB))
{
data <- bigdata[10:rowNum,j]
writeData(wb,sheetName,data,startRow=2,startCol=i,colName=FALSE)
next
}
}
}
#保存到本地文件
saveWorkbook(wb,"E:/MoveData/ResultData.xlsx")