使用TableTools或其他方式在Shiny中添加电子邮件按钮

Bah*_*mid 2 datatable r tabletools shiny

下面的代码生成一个DataTable输出,我希望使用“电子邮件”按钮通过电子邮件发送它,类似于下面创建的“导出”按钮。有没有简单的方法来添加按钮,以便在单击时弹出Microsoft Outlook以将数据表作为附件发送,例如以csv格式发送?

另外,请单击此处此处以解决类似问题。

#Load required packages
require(shiny)

#Create a dataframe
df <- data.frame(random=1:160)

server <- function(input,output,session){

    #Display df using DataTable and apply desired options
    output$display <- renderDataTable({df}, 
           option=list(pageLength=100,
                       "dom" = 'T<"clear">lfrtip',
                       "tableTools" = list(
                        "sSwfPath" = "//cdn.datatables.net/tabletools/2.2.3/swf/copy_csv_xls_pdf.swf",
                        "aButtons" = list(list("sExtends" = "csv","oSelectorOpts"=list("page"="all"),"sButtonText" = "Export","aButtons" ="csv")))         
       )

   )
}

ui <- shinyUI(fluidPage(

    #Add a title
    h1('Testing TableTools'),

    #Add required JS libraries
    tagList(
        singleton(tags$head(tags$script(src='//cdn.datatables.net/1.10.4/js/jquery.dataTables.min.js',type='text/javascript'))),
        singleton(tags$head(tags$script(src='//cdn.datatables.net/tabletools/2.2.3/js/dataTables.tableTools.min.js',type='text/javascript'))),
        singleton(tags$head(tags$link(href='//cdn.datatables.net/tabletools/2.2.3/css/dataTables.tableTools.css',rel='stylesheet',type='text/css')))
            ),


        mainPanel(
           #Display results
           dataTableOutput('display')
                 )      


))

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

Ham*_*ake 5

一种快速的方法是使用mailto(与Outlook配合使用)。

mailto将需要内部HTML()标签的光泽呈现它。

HTML(
<a href="mailto:hello@rshiny.com?
body='Hello,World!  Check out my data.'
&subject='Data'
&attachment='\\myfolder\shinyData.csv'">click here for email!</a>
)
Run Code Online (Sandbox Code Playgroud)

有两种假设的方法可以做到这一点。

  1. mailto在ui.R

该代码将需要datatable在用户端下载(可能在temp文件夹中),并将其附加到那里。

  1. mailto在server.R

您需要已保存在服务器上的csv文件才能将其作为附件加载。您将需要在a内使用上述代码renderUI(),并将文件从服务器传递到用户端。

有一项downloadHandler()功能允许用户从服务器下载上述功能。

我从未尝试过像尝试传递附件那样的方式,但是上述逻辑既可以让您创建电子邮件,又可以使您正确地附加文件。

  • 不幸的是,@ HamiltonBlake我认为您的答案有错别字。为了使一切正常,应将&lt;ahref =`更改为&lt;a href =`。 (2认同)