2011-06-29 32 views
0

我想添加两个空行到我创建的xlsx文件的顶部。如何使用xlsx软件包将空白顶部行添加到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是空的!

回答

2

我有点被你试图在for循环做什么困惑,但:

你可以创建一个具有相同数量WB列的虚拟对象,然后使用rbind()来加入虚拟和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) 

希望帮助

+0

我得到错误 错误在wb [c(1,2),]:'S4'类型的对象不是子集合PS我试图添加到行的循环每行的数量,以便它出现两行,但它只是删除所有行。 –

+0

声音像wb不是作为数据框加载,而是作为列表或向量。尝试str(wb),你可能有在添加行之前强制wb – Chris

2

所以XLSX包居然为了拉和修改工作簿与Java库接口。 read.xlsx和write.xlsx函数是便捷包装,用于在R内读写数据帧,而无需手动编写代码来使用java对象自己分析单个单元和行。 loadWorkbook和getRows函数使您可以访问实际的Java对象,然后可以使用它们修改单元格样式等内容。但是,如果您希望在输出电子表格之前添加空白行,最简单的方法是在导出数据框之前向数据框添加空行(如克里斯提到的那样)。你可以在你的代码下面变种做到这一点:

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]]),它将列出您可以在对象上使用的可用函数(在单元级别这些都是相当广泛的)

+0

好的答案!不幸的是,行名仍然写在最上面的一行中,后面跟着两行空白行。 –