2011-06-29 31 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

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