首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用officeR在shiny中生成word报表

用officeR在shiny中生成word报表
EN

Stack Overflow用户
提问于 2019-09-17 15:29:21
回答 1查看 376关注 0票数 0

我想使用shiny将一组日期和天数作为输入,计算这些天之间的天数,然后在word文档中生成这些操作的输出。当我只使用R时,代码可以工作,但是当我尝试在shiny中运行它时,它失败了-因为没有生成文档。

我当前的代码如下所示。

代码语言:javascript
复制
####Setup####
  library(shiny)  
  library(needs)
  library(tidyverse)
  library(lubridate)
  library(officer)
  library(ical)


####Generate page####
ui <- fluidPage(
  titlePanel("Shiny Example"),

  sidebarLayout(
    sidebarPanel(
      #Input for Date Range
      dateInput("date_begin", label = h3("Start Date"), 
                language= "de",  
                format = "dd-mm-yyyy"),
      dateInput("date_end", label = h3("End Date"), 
                language= "de",
                format = "dd-mm-yyyy"),

      #Week Days 
      checkboxGroupInput("weekdays", label = h3("Weekdays"), 
      choices = list("Monday" = 2, 
                     "Tuesday" = 3, 
                     "Wednesday" = 4, 
                     "Thursday" = 5, 
                     "Friday" = 6, 
                     "Saturday" = 7, 
                     "Sunday" = 1), hr())
      ),

    mainPanel(
      textOutput("begin"),
      verbatimTextOutput("Days"),
      downloadButton('downloadData', 'download')

    )
  )
)

server <- function(input, output) {

  ####Calculations####
  #Find all days between the dates

  output$begin <- renderText({ 
    paste("Days between", 
          input$date_begin,  "and", 
          input$date_end, "statt")
  })

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

     content = function(file) {

      ###Generate Date Vector###
       #Get Dates
       myDates <-seq(from = input$date_begin, to = output$date_end, by = "days")
       #Identify Date of Weekday
       select.vec<-which(wday(myDates) %in% c(output$weekdays))
       #Subset Data by Weekday
       date.vec<-myDates[select.vec]

       #Generate Number Vector
       number.vec<-seq(1,length=length(date.vec))

       #Generate Vector of Heading Names (German Format)
       name.vec1<-paste("Day",number.vec,sep=" ")

      ###Generate File###
          doc.full<-read_docx("")     

    #Write date in for loop
    for (i in 1:length(date.vec)){
      #Generate German output for date
      temp.date<-paste(day(date.vec[i]),
                       month(date.vec[i]),
                       year(date.vec[i]), 
                       sep=".")
      doc.full<-doc.full %>% 
      body_add_par(value = name.vec1[i], style =  "Sitzung") %>% 
      body_add_par(value = temp.date, style =  "Datum") 
    }

    #Write Output
          doc.full%>% 
            print(target = file)
    }
   )

}

# Run the application 
shinyApp(ui = ui, server = server)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-17 16:12:22

有几个错误。

代码语言:javascript
复制
  #Get Dates
  myDates <-seq(from = input$date_begin, to = output$date_end, by = "days")
  #Identify Date of Weekday
  select.vec<-which(wday(myDates) %in% c(output$weekdays))

替换为

代码语言:javascript
复制
  #Get Dates
  myDates <-seq(from = input$date_begin, to = input$date_end, by = "days")
  #Identify Date of Weekday
  select.vec<-which(wday(myDates) %in% c(input$weekdays))

接下来,因为没有文件"",所以read_docx("")不起作用。要使用默认模板,请执行read_docx()

但如果使用默认模板,则

代码语言:javascript
复制
    doc.full <- doc.full %>% 
      body_add_par(value = name.vec1[i], style =  "Sitzung") %>% 
      body_add_par(value = temp.date, style =  "Datum") 

不起作用,因为默认模板中没有样式SitzungDatum

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57969339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档