美文网首页
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