使用R Shiny从XLConnect下载Excel文件

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 无法写入临时文件。

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

一种选择是将文件保存到特定位置,然后创建一个指向它的下载链接。然而,这不太 Shiny-esque,因为多个用户会引起混乱。

非常感谢

Marcus

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

当我使用saveWorkbook(wb)时,它会给我一个错误,说文件参数是必需的。 - Miguel Santos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接