2

タイトルが示すように、私は上記をやりたいと思います。以下の例:

library(stringr)
library(XLConnect)

df <- data.frame(do.call("rbind", lapply(1:10, function(i) rnorm(10))))
df.list <- rep(list(df), 10)
names(df.list) <- paste("DataFrame", str_pad(1:length(df.list), 2, pad = "0"), sep = "")

df.list.workbook <- loadWorkbook("df.list.workbook.xlsx", create = TRUE)
lapply(1:length(df.list), function(i) createSheet(df.list.workbook, name = names(df.list[i])))
lapply(df.list[1:length(df.list)], function(i) writeWorksheet(df.list.workbook, i, sheet = names(i)))

最後の行は、エラーをスローする場所です。

Error: IllegalArgumentException (Java): Sheet index (-1) is out of range (0..9)

これをトラブルシューティングするために、私は試しました:

lapply(df.list[1:length(df.list)], function(i) print(names(i)))

そして、列の名前がシート変数に渡されていたことに注意してください。これを克服する方法はありますか?

4

2 に答える 2

4

lapplyリストの代わりにインデックスを上書きする必要があります。

lapply(seq_along(df.list), function(i) writeWorksheet(df.list.workbook, df.list[[i]], sheet = names(df.list)[i]))
于 2012-03-24T09:54:01.513 に答える
3

XLConnectは多くの場所でベクトル化されています。あなたの場合、これはとに当てはまるのでcreateSheetwriteWorksheet次のように書くことができます。

df.list.workbook <- loadWorkbook("df.list.workbook.xlsx", create = TRUE)
createSheet(df.list.workbook, name = names(df.list))
writeWorksheet(df.list.workbook, data = df.list, sheet = names(df.list))
saveWorkbook(df.list.workbook)
于 2012-03-26T18:08:05.843 に答える