是否有人尝试使用R Shiny中的下载处理程序下载带有XLConnect的新创建的Excel文件?
在ui.R中有一条不起眼的线:
downloadButton('downloadData', 'Download')
在server.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没问题,使用XLConnect创建excel文件没问题。但是,当我运行上述代码时,我的Chrome浏览器出现以下错误:
IllegalArgumentException(Java):文件扩展名“file1b683b9323bc”没有 支持的!只允许* .xls和* .xlsx!
据我所见,XLConnect无法写入临时文件。
有没有人有解决方案或解决方法?
一种选择是将文件保存在特定位置,然后创建指向它的下载链接。然而,由于多个用户会导致havok,这不是很闪亮。
非常感谢
马库斯
答案 0 :(得分:13)
尝试将此用于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操作,然后将最终文件重命名为原始名称(例如,剥离扩展名)。