【问题标题】:Download xls file with multiple sheets as data frames Shiny R下载带有多张工作表的 xls 文件作为数据框 Shiny R
【发布时间】:2016-04-28 21:18:33
【问题描述】:

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

我有一个下载按钮,允许我将数据导出到 Excel 文件中。在 excel 文件中,有 4 张工作表,每张都有一个数据框。

例如,sheet1中有dataTab1,sheet2中有dataTab2,sheet 3中有dataTab3,sheet4中有dataTab4。

为此,我在闪亮的 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(文件)中的错误: 未知格式 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

  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" 

)

问题是即使我通过键入以下命令调用了 RODBC 包,也无法识别 odbcConnectExcel() 函数: 库(RODBC)

你知道为什么会这样吗?

【问题讨论】:

  • 当你尝试修复xlsx“我已经尝试修复”时,你尝试使用library(XLConnect)吗?
  • 当您告诉downloadHeader() 时,它的意思是downloadHandler 或其他什么?
  • 你好巴塔尼切克。是的,我尝试使用库(XLConnect)。
  • 我输错了 downloadHeader()。正确的词是downloadHandler()
  • 再次您好,非常感谢!显然我已经使用了 XLConnect 包,因为当我现在使用它时,一切正常!

标签: r excel shiny xlsx rodbc


【解决方案1】:

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

首先,您必须调用 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" 

)

【讨论】:

    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    相关资源
    最近更新 更多