R Shiny导出记录到用户命名的Excel工作簿

时间:2016-07-12 15:29:06

标签: r excel shiny

我正在尝试为练习编写一个Shiny应用程序 该应用程序采用Excel工作表,从Excel工作表中获取ID编号,并针对数据库运行这些ID,从数据库返回一些其他详细信息

就本例而言,我已导入数据并计算数据集中的行数。然后我将此数据集传递给函数get_DW,它将返回一个数据帧,我想计算返回的数据帧中的记录数。当用户按下按钮Go

时,会执行此步骤

当我运行我的闪亮应用程序时,会计算数据导入和记录数。我还设法让它从数据库中返回记录并计算这些记录。

我无法使用output$downloadData导出它们,没有任何反应。我按下按钮获取保存的对话框,但是当我输入文件名并按保存时,没有任何内容保存到文件夹

任何人都可以在代码中看到我可能出错的地方。我已经看到问题Downloading Excel File from XLConnect with R Shiny,但它没有使用我想要的库,我不太清楚给出的解释

我已更新以下代码以使用虹膜数据集。它有点乱,但它复制了缺少保存

服务器代码

# Server Code
server <- shinyServer(function(input, output) {

  # Create a reactive expression which will grab the data
  # We pass that to the outputs reactive element to the outputs
  data <- reactive({
   iris
  })

 # Return the number of records
 output$Inputnum <- renderText({
   paste(nrow(data()), "records to be checked")
 })

 # Data returned by Database
 en_data <- eventReactive(input$go, {
   get_DW(data())   
 }) 

 # Return the number of records
 output$Outputnum <- renderText({
   paste(nrow(en_data()), "records matched")
})

 output$downloadData<- downloadHandler(
  filename = function() { "name.xlsx" },

content = function(file) {
  tempFile <- tempfile(fileext = ".xlsx")
  write.xlsx(en_data(), tempFile)
  file.rename(tempFile, file)
})
})  

用户界面代码

shinyUI(
  fluidPage(
titlePanel("POC"),
sidebarLayout(
  sidebarPanel(

    fileInput(inputId = 'file1',label =  'Choose An Excel File',
              accept=c('.xlxs')),

    radioButtons(inputId = "radio", label = "Search By:",
                 choices = list("option 1" = 1, 
                                "option 2" = 2, 
                                "option 3" = 3), 
                 selected = 1),

    hr(),

    fluidRow(column(1,
                    actionButton("go", "Get Records")),
             column(2,offset = 2,
                    downloadButton('downloadData', 'Download')),
             br()
    )),

  mainPanel(
    verbatimTextOutput("Inputnum"),
    br(),
    verbatimTextOutput("Outputnum")
  )
)
  ))

GLOBAL R FILE

#in global.R
options (scipen=FALSE,stringsAsFactors=FALSE)
library(xlsx)
library(RODBC)
library(dplyr)

get_DW <- function (mydf) {
  mydf 
}

1 个答案:

答案 0 :(得分:1)

几个星期前我遇到过同样的问题。尝试从外部而非本地运行您的应用。这对我使用您的示例代码很有用。

enter image description here