15

有没有人尝试使用 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 无法写入临时文件。

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

一种选择是将文件保存在特定位置,然后创建指向它的下载链接。但是,这不是很闪亮的,因为多个用户会导致破坏。

非常感谢

马库斯

4

1 回答 1

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扩展名。因此,这只是附加.xlsxfile所有 XLConnect 操作并将其用于所有操作,然后将最终文件重命名为原始名称(例如,去除扩展名)。

于 2014-01-27T17:50:22.530 回答