2014-08-28 5 views
3

Этот вопрос задан ранее R shiny dataTables with TableTools and other extensions и Use TableTools for DataTables in R Shiny for renderDataTable, но в настоящее время я пытаюсь получить эту демонстрацию TableTools для загрузки csv или xls из блестящего приложения. Кнопка работает, и опция csv/xls доступна, но ничего не происходит. Единственное, что я мог подумать, это обновить версию datatables с 1.9.4 до 1.10.1, но все равно ничего. Все остальные пути обновляются, если я не ошибаюсь. Спасибо.Сохранение от Shiny renderDataTable

library(shiny) 
library(ggplot2) 
runApp(
    list(ui = basicPage(
    h1('Diamonds DataTable with TableTools'), 
    tagList(
     singleton(tags$head(tags$script(src='//cdnjs.cloudflare.com/ajax/libs/datatables/1.9.4/jquery.dataTables.min.js',type='text/javascript'))), 
     singleton(tags$head(tags$script(src='//cdnjs.cloudflare.com/ajax/libs/datatables-tabletools/2.1.5/js/TableTools.min.js',type='text/javascript'))), 
     singleton(tags$head(tags$script(src='//cdnjs.cloudflare.com/ajax/libs/datatables-tabletools/2.1.5/js/ZeroClipboard.min.js',type='text/javascript'))), 
     singleton(tags$head(tags$link(href='//cdnjs.cloudflare.com/ajax/libs/datatables-tabletools/2.1.5/css/TableTools.min.css',rel='stylesheet',type='text/css'))), 
     singleton(tags$script(HTML("if (window.innerHeight < 400) alert('Screen too small');"))) 
    ), 
    dataTableOutput("mytable") 
) 
    ,server = function(input, output) { 
    output$mytable = renderDataTable({ 
     diamonds[,1:6] 
    }, options = list(
     "sDom" = 'T<"clear">lfrtip', 
     "oTableTools" = list(
     "sSwfPath" = "//cdnjs.cloudflare.com/ajax/libs/datatables-tabletools/2.1.5/swf/copy_csv_xls.swf", 
     "aButtons" = list(
      "copy", 
      "print", 
      list("sExtends" = "collection", 
       "sButtonText" = "Save", 
       "aButtons" = c("csv","xls") 
     ) 
     ) 
    ) 
    ) 
    ) 
    }) 
) 
+0

не уверен, что ваш код верен. Нет кнопки для меня – xiaodai

ответ

6

После этого, я обнаружил свою первоначальную ошибку. Смущающе, основной проблемой было то, что я пытался сэкономить непосредственно из запуска rstudio блестящего приложения. С тех пор я узнал, что это невозможно, потому что у rstudio нет вспышки. Таким образом, начальным решением было просто запустить приложение, а затем открыть его в браузере с установленной вспышкой. Кнопка сохранения затем работает надлежащим образом, и я могу сохранить отфильтрованный набор данных.

Однако во время моих усилий я обнаружил некоторое упрощение, которое другие могут найти полезным.

Следующая версия блестящей будет использовать последние 1.10.2 DataTables. Вы можете загрузить текущую версию dev с github page. Это позволяет опустить файл zeroclipboard после обновления ссылок для других исходных файлов. Ниже приведен последний код, который я нашел, работает при открытии в браузере с последним блестящим пакетом. Обратите внимание, что небольшое изменение в нотации, поскольку DataTables 1.10.x преобразуется в нотацию camelCase. Обнаружены копии из старой записи here.

library(shiny) 
library(ggplot2) 
runApp(
    list(ui = basicPage(
    h1('Diamonds DataTable with TableTools'), 
    tagList(
     singleton(tags$head(tags$script(src='//cdn.datatables.net/1.10.2/js/jquery.dataTables.min.js',type='text/javascript'))), 
     singleton(tags$head(tags$script(src='//cdn.datatables.net/tabletools/2.2.2/js/dataTables.tableTools.min.js',type='text/javascript'))), 
     singleton(tags$head(tags$link(href='//cdn.datatables.net/tabletools/2.2.2/css/dataTables.tableTools.css',rel='stylesheet',type='text/css'))), 
     singleton(tags$script(HTML("if (window.innerHeight < 400) alert('Screen too small');"))) 
    ), 
    dataTableOutput("mytable") 
) 
    ,server = function(input, output) { 
    output$mytable = renderDataTable({ 
     diamonds[,1:6] 
    }, options = list(
     "dom" = 'T<"clear">lfrtip', 
     "oTableTools" = list(
     "sSwfPath" = "//cdnjs.cloudflare.com/ajax/libs/datatables-tabletools/2.1.5/swf/copy_csv_xls.swf", 
     "aButtons" = list(
      "copy", 
      "print", 
      list("sExtends" = "collection", 
       "sButtonText" = "Save", 
       "aButtons" = c("csv","xls") 
     ) 
     ) 
    ) 
    ) 
    ) 
    }) 
) 

РЕДАКТИРОВАТЬ

По состоянию DT 0.1.5x интерфейс изменился вслед за обновлениями TableTools. Теперь вы используете кнопки Buttons. Примечание - это все еще (3/29/16) требует, чтобы пользователь установил от github, пока автор не сочтет обновления достаточными для нажатия на CRAN.

library(shiny) 
library(DT) 
library(ggplot2) 

runApp(
    list(ui = basicPage(
    h1('Diamonds DataTable with DT'), 
    dataTableOutput("mytable") 
) 
    ,server = function(input, output) { 
    output$mytable = renderDataTable({ 
     diamonds[,1:6] 
    }, 
    extensions = 'Buttons', 
    options = list(
     "dom" = 'T<"clear">lBfrtip', 
     buttons = list('copy', 'csv', 'excel', 'pdf', 'print') 
    ) 
    ) 
    }) 
) 
+0

Кнопка сохранения ничего не делает при сохранении как csv, так и excel. Я попытался сделать это, запустив блестящее приложение через браузер. –

+2

@BlackMilk см. Мои правки. Интерфейс недавно изменился. Предоставленные изменения работают для меня. – cdeterman

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