[英]Using Javascript to export data table as CSV in Shiny using shinyjs
我创建了一个Shiny应用程序,可以在数据表中输出数据。 由于数据表包含已插入的下拉菜单,因此Shiny和datatable的默认下载按钮不起作用(要么输出所有,包括所有下拉菜单选项,要么输出HTML)。 我正在尝试使用Javascript导出我拥有的数据。 为此,我使用了以下基于以下指南创建的外部Javascript函数downloadcsv.js
:
shinyjs.myfunction = function(args) {
var data, filename, link, result, ctr, keys, columnDelimiter, lineDelimiter;
columnDelimiter = ',';
lineDelimiter = '\n';
keys = Object.keys(data[0]);
result = '';
result += keys.join(columnDelimiter);
result += lineDelimiter;
data.forEach(function(item) {
ctr = 0;
keys.forEach(function(key) {
if (ctr > 0) result += columnDelimiter;
result += item[key];
ctr++;
});
result += lineDelimiter;
});
csv = result;
filename = 'export.csv';
if (!csv.match(/^data:text\/csv/i)) {
csv = 'data:text/csv;charset=utf-8,' + csv;
}
data = encodeURI(csv);
link = document.createElement('a');
link.setAttribute('href', data);
link.setAttribute('download', filename);
link.click();
}
在我的Shiny应用程序的ui.R
,我使用以下命令添加了一个下载按钮:
shinyjs::useShinyjs(),
extendShinyjs(script = "downloadcsv.js"),
actionButton("download", "Download"),
在server.R
我添加了:
onclick("download", js$myfunction(data))
但是,单击“下载”按钮时,没有任何反应。 在RStudio的浏览器或窗口中运行Shiny并没有什么不同。 似乎link.click();
行未执行,或者根本没有创建下载链接。 当使用shiny.trace = TRUE
运行应用程序时,控制台中的输出如下。
发送{“忙”:“忙”}
发送{“ custom”:{“ shinyjs-myfunction”:{“ data”:[“ test1”,“ test2”]}}}
发送{“忙”:“空闲”}
因此,单击按钮后,Javascript函数似乎正在执行,但是没有输出/下载出现。
所以确实问题出在代码link
的最后4行。 我已经用类似的代码替换了四行。 但是添加了在FF中使用的必填行:
var encodedUri = encodeURI(csv);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "my_data.csv");
document.body.appendChild(link); // Required for FF
link.click(); // This will download the data file named "my_data.csv".
基于如何将JavaScript数组信息导出到csv(在客户端)?
我只需要找到一种将R中的数据正确传递给Javascript函数的方法。
编辑:我已经找到了如何做到这一点 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.