2016-01-22 5 views
1

Я использую пакет R Shiny для разработки собственного веб-приложения.Загрузить файл xls с несколькими листами в качестве фреймов данных Shiny R

У меня есть кнопка загрузки, которая позволяет мне экспортировать данные в файл excel. В файле excel есть 4 листа, и в каждом из них есть кадр данных.

Например, на листе 1 имеется dataTab1, на листе2 имеется dataTab2, на листе 3 - данныеTab3, а на листе4 - dataTab4.

Для этого я использую функцию downloadHeader() в блестящем сервере.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" 

) 

Проблема заключается в том, что функция odbcConnectExcel() не признается, даже если я назвал пакет RODBC, набрав : библиотека (RODBC)

у вас есть какие-либо идеи, почему это так

+0

, когда вы пытались исправить 'xlsx'«Я пытался исправить», вы пытались use'library (XLConnect)'? – Batanichek

+0

Когда вы сказали 'downloadHeader()' это означает 'downloadHandler' или smthing else? – Batanichek

+0

Привет, Батаничек. Да, я пытался использовать библиотеку (XLConnect). – Mily

ответ

2

? Я нашел решение моей проблемы.

Во-первых, вам нужно вызвать пакеты 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" 

) 

 Смежные вопросы

  • Нет связанных вопросов^_^