使用格式化单元格导出 R 数据表按钮
Posted
技术标签:
【中文标题】使用格式化单元格导出 R 数据表按钮【英文标题】:R datatable buttons export with formated cells 【发布时间】:2017-06-17 10:19:01 【问题描述】:扩展名Buttons
非常适合来自library(DT)
的闪亮应用程序。但是,它导出数据而不进行格式化。有没有办法以格式(例如百分比或货币)导出数据? Similar question 未解决。
可重现的代码
library(DT)
data.frame(a = c(1,2),
b = c(2,3)) %>%
datatable(extensions = 'Buttons', options = list(
dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print')) )%>%
formatPercentage('a') %>%
formatCurrency('b')
【问题讨论】:
不要认为这很容易。一种解决方法是在将数据传递给数据表之前对其进行格式化。您可以为此使用sprintf
。
感谢@HubertL,是的,我可以在将数据发送到 DT 之前对其进行预格式化,但是我认为它将被视为字符串而不是数字?
一旦在另一边添加货币和百分比符号,它就必须作为字符串存在。如果您希望将其保留为数字,请根据您的选择格式化数字,并将变量定义添加到列名。它使您的细胞对数学运算开放。
【参考方案1】:
您可以使用TableExport 库,而不是使用按钮扩展。
library(shiny)
library(DT)
library(shinyjs)
js_export <-
"
var $table = $('#DTtable').find('table');
var instance = $table.tableExport(
formats: ['xlsx'],
exportButtons: false,
filename: 'myTable',
sheetname: 'Sheet1'
);
var exportData0 = instance.getExportData();
var exportData = exportData0[Object.keys(exportData0)[0]]['xlsx'];
instance.export2file(exportData.data, exportData.mimeType, exportData.filename,
exportData.fileExtension, exportData.merges,
exportData.RTL, exportData.sheetname);
"
ui <- fluidPage(
useShinyjs(),
tags$head(
# put these files in the www subfolder
tags$script(src = "xlsx.core.min.js"),
tags$script(src = "FileSaver.min.js"),
tags$script(src = "tableexport.min.js")
),
DTOutput("DTtable"),
actionButton("export", "Export table")
)
server <- function(input, output, session)
output$DTtable <- renderDT(
data.frame(
a = c(1,2),
b = c(2,3)
) %>%
datatable() %>%
formatPercentage('a') %>%
formatCurrency('b')
)
observeEvent(input$export,
runjs(js_export)
)
shinyApp(ui, server)
【讨论】:
感谢您的建议。我同意js
可以进行很多自定义。我的想法是尽可能简单,因为有一个导出选项可以使用它。否则,可以直接编写 xlsx 文件并自定义单元格以上是关于使用格式化单元格导出 R 数据表按钮的主要内容,如果未能解决你的问题,请参考以下文章
如何设定PLSQL DEVELOPER导出的CSV文件中单元格格式为文本?
Office表中如何把一定范围单元格的内容多列数据去除空值以TXT文本方式导出?