2014-01-07 34 views
0

我使用xlsx製作了幾張工作簿,並且在每個工作表中我想添加一列超鏈接,每行都是不同的。我跟着例子在參考手冊中使用xlsx中的addHyperlink添加許多超鏈接

wb <- createWorkbook() 
sheet1 <- createSheet(wb, "Sheet1") 
rows <- createRow(sheet1, 1:10) # 10 rows 
cells <- createCell(rows, colIndex=1:8) # 8 columns 
cell <- cells[[1,1]] 
address <- "http://poi.apache.org/" 
setCellValue(cell, "click me!") 
addHyperlink(cell, address) 
saveWorkbook(wb, "foo.xlsx") 

這是相當直接的,但我想超鏈接的矢量顯示名稱的矢量傳遞給addHyperlink(),然後setCellValue()。爲此我想:

... 
cell <- cells[[1:2,1]] #I am assuming that cells is a matrix like object with 
         #[[rows, columns]] 

這給錯誤

Error in cells[[1:2, 1]] : attempt to select more than one element 

有沒有乾淨的方式來做到這一點,或者XLSX建立遍歷製作cell

最佳 薩姆

回答

0

我會說使用for循環:

library(xlsx) 
wb <- createWorkbook() 
sheet1 <- createSheet(wb, "Sheet1") 
rows <- createRow(sheet1, 1:10) # 10 rows 
cells <- createCell(rows, colIndex=1:8) # 8 columns 
links <- c("http://stackoverflow.com/questions/20978461/add-many-hyperlinks-using-addhyperlink-in-xlsx", 
      "http://stackoverflow.com/users/1599501/sam") 
names(links) <- c("add many hyperlinks using addHyperlink in xlsx", 
        "User: Sam") 
for (row in 1:length(links)) { 
    setCellValue(cells[[row,1]], names(links)[row]) 
    addHyperlink(cells[[row,1]], links[row]) 
} 
saveWorkbook(wb, "foo.xlsx") 
shell.exec("foo.xlsx") 
+0

我希望避免循環,你的代碼的工作,但是當行很長,它會減慢了很多,而且往往痙攣內存(至少我運行太多W/O重新啓動R時出現內存錯誤) – Sam