下载多张作为数据框的xls文件Shiny R

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

我有一个下载button,允许我将数据导出到Excel文件。 在excel文件中,有4张纸,每张纸上都有一个数据框。

例如,在sheet1中有dataTab1,在sheet2中有dataTab2,在sheet3中有dataTab3,在sheet4中有dataTab4。

为此,我正在使用函数downloadHeader()在shiny的server.R中。

我已经使用了两种方法来做到这一点。

方法1:使用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(文件)中的错误:未知格式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) } 

但是这对我不起作用。 也许我正在省略一些东西。 你有什么主意吗?

方法2:使用RODBC包

输出$ 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" ) 

问题是,即使我通过input以下命令调用了RODBC包,odbcConnectExcel()函数也不能被识别:library(RODBC)

你知道这是为什么吗?

我发现了我的问题的解决scheme。

首先你必须调用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" )