美文网首页
R语言扩展包xlsx() (01)

R语言扩展包xlsx() (01)

作者: siloes | 来源:发表于2015-02-04 13:23 被阅读1306次

xlsx()包,是一个可以让R读、写、格式化xlsx文件的扩展包。

为什么不用相对有更多教程的RODBC包?

最重要的原因是RODBC包只能在32位系统下运行,而我的是64位系统,无法运行RODBC;其次是xlsx()包允许设置excel单元格的格式,功能还比较强大。

前不久用xlsx()包写了两个操作excel文件的脚本,遇到一些问题,将经验记录如下:

1.read.xlsx2()函数无法读取第一行是合并单元格的xlsx文件。

在读取的xlsx文件第一行是合并单元格时报错,无法通过调整startRow参数修改,只能手工删除第一行解决。

2.addDataFrame()函数多次写入同一个工作表,数据错乱。

> # 用loadWorkbook函数读取test.xlsx文件,存入wb.rr变量
> wb.rr <- loadWorkbook(paste(path,"test.xlsx",sep=""))
> # 用getSheets函数取出test.xlsx文件中的工作表
> sheets.in.rr <- getSheets(wb.rr)
> # sheet.rr是test.xlsx文件的第一张工作表 
>  sheet.rr <- sheets.in.rr[[1]]
> # 将rrtotaldata数据用addDataFrame函数写入到sheet.rr工作表里
> addDataFrame(rrtotaldata, sheet.rr, col.names=FALSE, row.names=FALSE, startRow=nrow(rrtotal)+1+1, startColumn=1) 

出现了很奇怪的问题,在用addDataFrame对工作表写入数据时,不管startRow怎么设置,总要往上抹掉一行,而且在下面一行会写入一行原来最早输入的第一行数据,再往下如果按照startRow是跳过的,也会在下面写入新数据,然后在startRow设定的行数开始写数据。

百思不得其解,删掉数据的行名、列名,不排序,用原来的数据,试了很久都不行。但之前对另一个表使用addDataFrame函数都是正常的,而且参数几乎一致。想到是不是工作表对象没有关闭,导致写入数据错乱?

关掉R环境,重新加载,一次成功。

教训:对同一个对象连续应用addDataFrame函数要特别小心,上一次的运行可能会影响下一次的结果。

相关文章

网友评论

      本文标题:R语言扩展包xlsx() (01)

      本文链接:https://www.haomeiwen.com/subject/kfyrxttx.html