我想通过按钮(无登录系统)将我的收藏集导出为CSV或XLSX文件。
使用Meteor / JavaScript有一种简单的方法吗?
答案 0 :(得分:10)
您可以使用类似https://github.com/eligrey/FileSaver.js的内容在浏览器端创建Blob,然后将其作为下载提供。
客户端js
var yourCSVData = "Col1Row1,Col2Row1\nCol1Row2,Col2Row2";
var blob = new Blob([yourCSVData],
{type: "text/csv;charset=utf-8"});
saveAs(blob, "yourfile.csv");
将您的CSV构建到yourCSVData
,然后您就可以轻松下载该文件了。
要构建CSV,您必须使用一些自定义JavaScript。使用mongodb的是每个文档可以有不同的结构,这对行/列类型的文档来说非常糟糕。
你可以在上面的评论中使用Yvegeniy(http://jsfiddle.net/sturtevant/vUnF9/)给出的小提琴之类的东西。它可能会有所帮助
var data = MyCollection.find().fetch();
var yourCSVData = JSON2CSV(data);
答案 1 :(得分:1)
考虑到目前最新的Meteor 1.5和最新的Meteor软件包,以下是将 Mongo DB 集合转换为 CSV 所需遵循的步骤(也是可读的)通过MS Office就像一个魅力。)
您需要在执行以下任何步骤之前安装以下软件包
pfafman:filesaver
harrison:papa-parse
考虑一个简单的Blaze模板(即 MyTemplate.html ),下面带有下载链接,
<template name="MyTemplate">
<body>
<a href="#" role="button" class="download">Download</a>
</body>
</template>
同样,您可以拥有事件处理程序(即 MyTemplate.js )来处理“下载”链接点击事件,< / p>
Template.MyTemplate.events({
'click .download': function (event, template) {
var data = MyCollection.find({}).fetch();
var csv = Papa.unparse(data);
var blob = new Blob([csv], {type: "text/csv;charset=utf-8"});
saveAs(blob, "MyCollection.csv");
}
});
注意 - 当您点击下载链接时,您将无法获得任何弹出窗口或对话框供您继续下载,而是会自动为您自动下载。
答案 2 :(得分:0)
模板是一个非常好的导出系统
{{#each documents}}
"{{field1}}","{{field2}}"<br/>
{{/each}}
xlsx格式虽然丑陋,但也适用于同样的处理方式。
渲染HTML页面实际上是一回事。就像生成pdf一样。或者生成SQL。