我想在我创建的xlsx文件的顶部添加两个空白行。
到目前为止,我已尝试过:
library("xlsx")
fn1 <- 'test1.xlsx'
fn2 <- 'test2.xlsx'
write.xlsx(matrix(rnorm(25),5),fn1)
wb <- loadWorkbook(fn1)
rows <- getRows(getSheets(wb)[[1]])
for(i in 1:length(rows))
rows[[i]]$setRowNum(as.integer(i+1))
saveWorkbook(wb,fn2)
但是test2.xlsx
是空的!
答案 0 :(得分:2)
我对你试图用for循环做的事情感到有点困惑,但是:
您可以使用与wb相同的列数创建一个虚拟对象,然后使用rbind()连接dummy和wb以创建fn2。
fn1 <- 'test1.xlsx'
wb <- loadWorkbook(fn1)
dummy <- wb[c(1,2),]
# set all values of dummy to whatever you want, e.g. "NA" or 0
fn2 <- rbind(dummy, wb)
saveWorkbook( fn2)
希望有所帮助
答案 1 :(得分:2)
因此xlsx包实际上与java库接口,以便引入和修改工作簿。 read.xlsx和write.xlsx函数是在R中读取和写入数据帧的便捷包装器,无需手动编写代码来使用java对象自行解析单个单元格和行。 loadWorkbook和getRows函数使您可以访问实际的java对象,然后可以使用它们来修改单元格样式等内容。
但是,如果您要做的只是在输出电子表格之前向电子表格添加空白行,最简单的方法是在导出数据框之前向数据框添加空白行(如Chris所提到的)。您可以使用代码中的以下变体来完成此操作:
library("xlsx")
fn1 <- 'test1.xlsx'
fn2 <- 'test2.xlsx'
# I have added row.names=FALSE because the read.xlsx function
# does not have a parameter to include row names
write.xlsx(matrix(rnorm(25),5),fn1,row.names=FALSE)
# If you read your data back in using the read.xlsx function
# you will have a data frame rather than a series of java object references
wb <- read.xlsx(fn1,1)
# Now that we have a data frame we can add a blank row at the top
wb<-rbind.data.frame(rep("",5),wb)
# Then we write to the file using the same function as before
write.xlsx(wb,fn2,row.names=FALSE)
如果您希望使用java库中的高级功能,其中一些当前未在R包中实现,因此您必须使用.jcall直接调用它。如果您决定采用这一行动,我绝对建议在生成的对象上使用.jmethods(即.jmethods(rows [[1]]),它将列出您可以在对象上使用的可用函数(在细胞级别)这些都非常广泛。)