后续:在保留格式的同时从R写入Excel中的模板

时间:2012-09-28 14:37:25

标签: r excel format xlsx

以下是Write from R into template in excel while preserving formatting的两个相关后续问题 我在这里写了一个新的帖子,因为我不能在另一个中评论答案。

  1. 实际上Joris Meys的答案/代码(6月27日)对我不起作用,我已经多次试过了。

    所以再次:目的是在模板文件中使用格式化或只保留它时用R写一个excel文件。答案中提到了两种不同的工具:XLConnect和xlsx。

    Joris Meys的答案基于XLConnect。但是使用完全相同的代码,我的结果是填充了新内容的单元格变为白色而没有任何保留的格式。所有其他单元格(没有插入新内容)确实接管了以前的样式。

    我在WinXP中使用最新的RGui(32位)V。2.15.1以及XLConnect和xlsx的最新版本(我还检查了R中的所有其他软件包是否是最新的)。 / p>

  2. 确定与此相关的第二个问题:该主题提到xlsx作为替代方案。这些信息在我看来也是错误的。我检查了网站,开发人员似乎正在研究解决方案。目前我只看到xlsx在代码中手动编写格式的可能性,例如:

    cs2 <- CellStyle(wb) +    
      Font(wb, name="Courier New", isBold=TRUE) +   # add a Font
      Borders(col="blue", position=c("TOP", "BOTTOM"), pen="BORDER_THICK") +  # add borders    
      Alignment(h="ALIGN_RIGHT") 
    

    (资料来源:http://code.google.com/p/rexcel/wiki/LowLevelAPI

    如果有人能够在保留R格式的同时编写excel文件的方式,那真的很酷。

  3. 编辑:这是代码(仅差异“Sheet1”而不是“aSheet”,但我也尝试了其他变体。

    require(XLConnect)
    wb <- loadWorkbook("test.xlsx", create=TRUE)
    setStyleAction(wb,XLC$"STYLE_ACTION.NONE")
    
    Data <- data.frame(
      a = 1:10,
      b = letters[1:10]
    )
    
    writeWorksheet(wb,Data,"Sheet1",startRow=1,startCol=1,header=TRUE)
    
    saveWorkbook(wb)
    

1 个答案:

答案 0 :(得分:0)

问题1:

格式化单元格的示例代码:

library('xlsx')

# create the workbook 
wb <- createWorkbook()
sheet <- createSheet(wb, sheetName="addDataFrame1")
data <- data.frame(mon=month.abb[1:10], day=1:10, year=2000:2009,
                   date=seq(as.Date("1999-01-01"), by="1 year", length.out=10),
                   bool=c(TRUE, FALSE), log=log(1:10),
                   rnorm=10000*rnorm(10),
                   datetime=seq(as.POSIXct("2011-11-06 00:00:00", tz="GMT"), by="1 hour",
                                length.out=10))
cs1 <- CellStyle(wb) + Font(wb, isItalic=TRUE) # rowcolumns
cs2 <- CellStyle(wb) + Font(wb, color="blue")
cs3 <- CellStyle(wb) + Font(wb, isBold=TRUE) + Border() # header
addDataFrame(data, sheet, startRow=3, startColumn=2, colnamesStyle=cs3,
             rownamesStyle=cs1, colStyle=list('2'=cs2, '3'=cs2))

# save the workbook ...
saveWorkbook(wb, "test.xlsx")

查看输出文件。

问题2:

cs2 <- CellStyle(wb) +    
  Font(wb, name="Courier New", isBold=TRUE) +   # add a Font
  Borders(col="blue", position=c("TOP", "BOTTOM"), pen="BORDER_THICK") +  # add borders    
  Alignment(h="ALIGN_RIGHT") 

您只需将变量放在样式中使用的参数中即可。