使用R Shiny从XLConnect下载Excel文件

ste*_*ock 15 excel r download shiny xlconnect

有没有人尝试使用R Shiny中的下载处理程序下载带有XLConnect的新创建的Excel文件?

在ui.R中有一条不起眼的线:

downloadButton('downloadData', 'Download')
Run Code Online (Sandbox Code Playgroud)

在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)
    }
)
Run Code Online (Sandbox Code Playgroud)

我下载.csv没有问题,使用XLConnect创建excel文件没问题.但是当我运行上面的代码时,我的Chrome浏览器出现以下错误:

IllegalArgumentException(Java):不支持文件扩展名"file1b683b9323bc"!只允许*.xls和*.xlsx!

据我所知,XLConnect无法写入临时文件.

有没有人有解决方案或解决方法?

一种选择是将文件保存在特定位置,然后创建指向它的下载链接.然而,由于多个用户会导致havok,因此这不是很闪亮.

非常感谢

马库斯

jlh*_*ard 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)
    }
Run Code Online (Sandbox Code Playgroud)

问题是,这file是一个随机生成的临时文件,没有扩展名,而saveWorkbook(...)需要.xlsx扩展名.因此,这只是追加.xlsxfile并使用所有XLConnect操作,然后重命名最终文件到原来的名称(例如,剥去扩展名).