我正在尝试使用lapply
和XLConnect
重命名工作簿列表中的工作表(我需要重命名它们以使代码的下一部分正常运行,更多内容在第2部分中) :
library(XLConnect)
# testWB.xlsx contains a blank worksheet called Sheet1
testWB <- rep(lapply("testWB.xlsx", loadWorkbook), 3)
lapply(1:length(testWB), function(x) {
renameSheet(testWB[[x]], "Sheet1", "test1")
})
给我错误:
`Error: IllegalArgumentException (Java): Sheet index (-1) is out of range (0..0)`
可是:
renameSheet(testWB[[1]], "Sheet1", "test1")
按原样重命名工作表。这很奇怪,renameSheet
不适用于lapply,但getActiveSheetIndex
确实适用于lapply。
unlist(lapply(1:length(testWB), function(x) {
getActiveSheetIndex(testWB[[x]])
}))
[1] 1 1 1
我测试了其他XLConnect
函数,有些函数在lapply中工作,而其他函数则没有。
我需要重命名工作表才能使writeWorksheet
函数正常工作。 E.g:
cell_data <- c("Larry", "Curly", "Moe")
unlist(lapply(1:length(testWB), function(x) {
writeWorksheet(testWB[[x]], cell_data[x], sheet = "sheet1", header = F)
readWorksheet(testWB[[x]], "Sheet1", header = F)
}))
Col1 Col1 Col1
"Larry" "Curly" "Moe"
但在运行上述循环后查看testWB:
unlist(lapply(1:length(testWB), function(x) {
readWorksheet(testWB[[x]], "Sheet1", header = F)
}))
Col1 Col1 Col1
"Moe" "Moe" "Moe"
正如您所看到的,最终将Moe
输入到每个工作簿中每个工作表的所有A1单元格中,而不是在每个相应工作簿的A1单元格中输入Larry, Curly, Moe
。如果工作簿表具有不同的名称(例如,Sheet1,Sheet2,Sheet3),则它可以正常工作。因此我的问题在第一部分。
由于我没有使用它,我不得不在R中重建testWB.xlsx
模板并重新应用格式。 testWB.xlsx
实际上是一种非常细致的excel形式,所以重新创建它并不理想。
我希望我错过了一些小事,并提前感谢您提出任何建议。
XLConnect
版本0.2-12