Загрузка файла Excel из XLConnect с R Shiny
Кто-нибудь пытался использовать обработчик загрузки в R Shiny для загрузки только что созданного файла Excel с помощью XLConnect?
В ui.R есть ничем не примечательная строка:
downloadButton('downloadData', 'Download')
В сервере .R есть обработчик:
output$downloadData <- downloadHandler(
filename = function() { "output.xlsx" },
content = function(file){
wb <- loadWorkbook(file, create = TRUE)
createSheet(wb, name = "Sheet1")
writeWorksheet(wb, c(1:3), sheet = "Sheet1") # writes numbers 1:3 in file
saveWorkbook(wb)
}
)
У меня нет проблем с загрузкой CSV и без проблем с созданием файла excel с помощью XLConnect. Но когда я запускаю код, как указано выше, я получаю следующую ошибку в браузере Chrome:
IllegalArgumentException (Java): расширение файла "file1b683b9323bc" не поддерживается! Разрешены только *.xls и *.xlsx!
Насколько я вижу, XLConnect не может записать во временный файл.
Кто-нибудь получил решение или обход?
Один из вариантов - сохранить файл в определенном месте, а затем создать ссылку для загрузки, указывающую на него. Тем не менее, это не очень Shiny-esque, поскольку многие пользователи могут вызвать хавок.
Большое спасибо
Марк
Ответы
Ответ 1
Попробуйте использовать это для функции content(...)
; он работает для меня...
content = function(file){
fname <- paste(file,"xlsx",sep=".")
wb <- loadWorkbook(fname, create = TRUE)
createSheet(wb, name = "Sheet1")
writeWorksheet(wb, c(1:3), sheet = "Sheet1") # writes numbers 1:3 in file
saveWorkbook(wb)
file.rename(fname,file)
}
Проблема заключается в том, что file
является произвольно созданным временным файлом без расширения, тогда как saveWorkbook(...)
требует расширения .xlsx
. Таким образом, это просто добавляет .xlsx
в file
и использует это для всех манипуляций XLConnect, а затем переименовывает окончательный файл в исходное имя (например, удаляет расширение).