#r #io #xls #xlsx #rjava
#r #io #xls #xlsx #rjava
Вопрос:
Я пытаюсь использовать пакет xlsx для сохранения списка именованных фреймов данных в файл xlsx. Все фреймы данных в списке имеют имена, но было бы неплохо, если бы это работало и с неназванными элементами списка.
Вот функция, которую я написал:
toXLS <- function(myList,myFile) {
#Initialize output workbook
require(xlsx)
wb <- createWorkbook()
for (name in names(myList)) {
createSheet(wb, sheetName=name)
}
#Write blank workbook to file
saveWorkbook(wb, myFile)
#Write output data to saved workbook
for (name in names(myList)) {
write.xlsx(myList[[name]], myFile, sheetName=name)
}
}
myList <- list(a=data.frame(1,2,3),b=data.frame('a','b','c'),d=data.frame('01-01-1900'))
toXLS(myList,paste(getwd(),'/output.xlsx',sep=''))
Он работает нормально, но перезаписывает выходную рабочую книгу при каждом вызове write.xlsx
. Как вставить фрейм данных в виде листа в рабочую книгу?
Я не женат на пакете xlsx, но, похоже, он предоставляет хороший интерфейс для файлов Excel с наименьшими затратами на настройку. Я открыт и для других хороших вариантов.
Ответ №1:
Сначала создайте файл Excel:
wb <- createWorkbook()
saveWorkbook(wb, 'output.xlsx')
Затем добавьте каждую книгу:
lapply(names(myList), function(x) write.xlsx(myList[[x]], 'output.xlsx', sheetName=x, append=TRUE))
Ответ №2:
Использовать append = TRUE
при вызове write.xlsx
.
Комментарии:
1. Как мне перезаписать существующий файл, А ЗАТЕМ добавить к нему именованные листы?
2. Когда я запускаю приведенный выше код с изменением
append = TRUE
, я получаю следующую ошибкуError in .jcall(wb, "Lorg/apache/poi/ss/usermodel/Sheet;", "createSheet", : java.lang.IllegalArgumentException: The workbook already contains a sheet of this name