3

这是两个相关的后续问题,用于从 R 写入 excel 中的模板,同时保留 我在新线程中编写的格式,因为我无法在另一个线程中评论答案。

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

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

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

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

  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 )

    如果有人可以提供一种编写 excel 文件的方法,同时使用 R 保留格式,那将是非常酷的。

编辑:这是代码(仅区别“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)
4

1 回答 1

0

问题一:

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

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") 

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

于 2013-08-29T13:12:11.747 回答