在模块中使用R Shining app下载powerpoint

在模块中使用R Shining app下载powerpoint,r,shiny,R,Shiny,我正在尝试为我们闪亮的应用程序开发一个功能,用户可以下载一个包含所有表格和图表的powerpoint。我确实看到了一个独立的应用程序,如果所有的表和图都在服务器组件中,我知道如何使用它。由于我们的代码库正在增加,并且我们正试图使用模块来破坏应用程序,因此我无法确定应该在哪里安装downloadhandler。如果我在服务器组件中有它,我如何将我的表格和绘图从模块传递到服务器中的这个函数。下面是独立下载到powerpoint代码的代码 library(shiny) library(officer)

我正在尝试为我们闪亮的应用程序开发一个功能,用户可以下载一个包含所有表格和图表的powerpoint。我确实看到了一个独立的应用程序,如果所有的表和图都在服务器组件中,我知道如何使用它。由于我们的代码库正在增加,并且我们正试图使用模块来破坏应用程序,因此我无法确定应该在哪里安装downloadhandler。如果我在服务器组件中有它,我如何将我的表格和绘图从模块传递到服务器中的这个函数。下面是独立下载到powerpoint代码的代码

library(shiny)
library(officer)
library(flextable)
library(dplyr)

my_table <- data.frame(
  Name = letters[1:4],
  Age = seq(20, 26, 2),
  Occupation = LETTERS[15:18],
  Income = c(50000, 20000, 30000, 45000)
)

ui <- fluidRow(
  column(
    width = 12,
    align = "center",
    tableOutput("data"),
    br(),
    downloadButton("download_powerpoint", "Download Data to PowerPoint")
  )
)

server <- function(input, output) {
  output$data <- renderTable({
    my_table
  })

  output$download_powerpoint <- downloadHandler(
    filename = function() {  
      "employee_data.pptx"
    },
    content = function(file) {
      flextable_prep <- flextable(my_table) %>% 
        colformat_num(col_keys = c("Age", "Income"), digits = 0) %>% 
        width(width = 1.25) %>% 
        height_all(height = 0.35) %>% 
        theme_zebra() %>% 
        align(align = "center", part = "all")

      example_pp <- read_pptx() %>% 
        add_slide(layout = "Title Slide", master = "Office Theme") %>% 
        ph_with_text(
          type = "ctrTitle",
          str = "Employee Data"
        ) %>% 
        ph_with(
          location = ph_location_type(type = "subTitle"),
          value = "Company 2019 Report"
        ) %>% 
        add_slide(layout = "Title and Content", master = "Office Theme") %>% 
        ph_with_text(
          type = "title",
          str = "2019 Data"
        ) %>% 
        ph_with_flextable_at(
          value = flextable_prep,
          left = 2.5,
          top = 2
        )

      print(example_pp, target = file)
    }
  )
}

shinyApp(ui, server)
库(闪亮)
图书馆(主任)
图书馆(flextable)
图书馆(dplyr)
我的桌子%
带文本的PHU(
type=“ctrTitle”,
str=“员工数据”
) %>% 
博士(
位置=位置类型(type=“subTitle”),
value=“公司2019年报告”
) %>% 
添加幻灯片(layout=“Title and Content”,master=“Office主题”)%>%
带文本的PHU(
type=“title”,
str=“2019年数据”
) %>% 
ph_与_flextable_在(
值=flextable_prep,
左=2.5,
top=2
)
打印(示例,目标=文件)
}
)
}
shinyApp(用户界面、服务器)

有几种方法可以将数据从一个模块传递到另一个模块

例如,您可以从一个模块返回一个反应,并在另一个模块中使用它

请参阅(我在此处删除了powerpoint生成,以便将重点放在反应性的实现上):

库(闪亮)
图书馆(主任)
图书馆(flextable)
图书馆(dplyr)

showui您可以从模块返回并使用结果,也可以分配给会话用户数据,请参见此处:谢谢Colin。我过去常常把表格下载到powerpoint。我无法做到这一点,因为我在powerpoint中添加了情节丰富的情节。我不知道能不能做到。我可以从另一个新问题开始。由于plotly是交互式的,很难将其捕获为powerpoint。你可能想试试