下载包含多个工作表的 xls 文件作为数据框 Shiny R

Download xls file with multiple sheets as data frames Shiny R

我正在使用 R 包 Shiny 来开发我自己的 Web 应用程序。

我有一个下载按钮,可以将数据导出到 excel 文件中。在 excel 文件中,有 4 个 sheet,每个文件中都有一个数据框。

例如,在sheet1中有dataTab1,在sheet2中有dataTab2,在sheet3中有dataTab3,在sheet4中有数据表4。

为此,我在 shiny server.R.

中使用函数 downloadHeader()

我用过两种方法来做到这一点。

方法一:使用R包xlsx

output$downloadTab <- downloadHandler(

  filename = "dataxls.xlsx",
  content = function(file) {

  #creation of the workbook
   dataxls=createWorkbook(file)
  #creation of the sheets
   dataTabs1=createSheet(wb=dataxls,sheetName="Compartiments-simulation_sans_changement") 
   dataTabs2=createSheet(wb=dataxls,sheetName="Esperance-simulation_sans_changement")         
   dataTabs3=createSheet(wb=dataxls,sheetName="Compartiments-simulation_avec_changement") 
   dataTabs4=createSheet(wb=dataxls,sheetName="Esperance-simulation_avec_changement")
 #add the dataframes to the sheets
   writeWorksheet(dataxls, dataTab1, sheet = "Compartiments-simulation_sans_changement")
   writeWorksheet(dataxls, dataTab2, sheet = "Esperance-simulation_sans_changement")
   writeWorksheet(dataxls, dataTab3, sheet = "Compartiments-simulation_avec_changement")
   writeWorksheet(dataxls, dataTab4, sheet = "Esperance-simulation_avec_changement")

   saveWorkbook(dataxls,file)


}
)

问题是我有以下错误: createWorkbook(file) 错误: 未知格式 C:\Users\Baramova\AppData\Local\Temp\Rtmpmyqyeh\fileafc6d2b5998.xlsx

我已尝试使用以下示例修复它:

content = function(file) {
  fname = paste(file,"xlsx",sep=".")
  wb = loadWorkbook(fname, create = TRUE)
  createSheet(wb, name = "Sheet1")
  writeWorksheet(wb, c(1:3), sheet = "Sheet1") 
  saveWorkbook(wb)
  file.rename(fname,file)
}

但这对我不起作用。也许我遗漏了什么。 你有什么主意吗?

方法二:使用RODBC包

output$downloadTab <- downloadHandler(

  filename ="Tab.xls",
  content = function(fname) {
    tmpdir <- tempdir()


    db <- paste(tmpdir,fname,sep="/")            
    channel <- odbcConnectExcel(xls.file = db,readOnly=FALSE)
    sqlSave(channel, Compartiments_simulation_sans_changement, tablename = "Compartiments_simulation_sans_changement")
    sqlSave(channel,  Esperance_simulation_sans_changement, tablename = "Esperance_simulation_sans_changement")
    sqlSave(channel, Compartiments_simulation_avec_changement, tablename = "Compartiments_simulation_avec_changement")
    sqlSave(channel, Esperance_simulation_avec_changement, tablename = "Esperance_simulation_avec_changement")
    odbcClose(channel)

    },
    contentType="application/csv" 

)

问题是 odbcConnectExcel() 函数无法识别,即使我通过键入以下内容调用了 RODBC 包: 图书馆(RODBC)

你知道为什么会这样吗?

我找到了问题的解决方案。

首先你必须调用 XLConnect 和 RODBC 包。 之后,您可以使用以下示例:

    output$downloadTab <- downloadHandler(  
       filename ="Tab.xls",
       content = function(file) {
           write.csv(Compartiments_simulation_sans_changement, file="Compartiments-simulation_sans_changement.csv")
           write.csv(Esperance_simulation_sans_changement, file="Esperance-simulation_sans_changement.csv")
           write.csv(Compartiments_simulation_avec_changement, file="Compartiments-simulation_avec_changement.csv")
           write.csv(Esperance_simulation_avec_changement, file="Esperance-simulation_avec_changement.csv")

       channel <- odbcConnectExcel(xls.file = file,readOnly=FALSE)
           sqlSave(channel, Compartiments_simulation_sans_changement, tablename = "Compartiments_simulation_sans_changement")
           sqlSave(channel,  Esperance_simulation_sans_changement, tablename = "Esperance_simulation_sans_changement")
           sqlSave(channel, Compartiments_simulation_avec_changement, tablename = "Compartiments_simulation_avec_changement")
           sqlSave(channel, Esperance_simulation_avec_changement, tablename = "Esperance_simulation_avec_changement")
       odbcClose(channel)

    },
    contentType="application/xls" 

)