Javascript 从JSON创建和下载.xls文件
我有以下代码,应该将JSON对象编码为XLSX,然后下载:Javascript 从JSON创建和下载.xls文件,javascript,angularjs,json,meteor,blob,Javascript,Angularjs,Json,Meteor,Blob,我有以下代码,应该将JSON对象编码为XLSX,然后下载: this.data = { foo: "xyz" } let json2xls = require('json2xls'); var data = json2xls(this.data); let blob = new Blob([data], { type: "binary" }); let a = angular.element("a"); a.attr("href", this.$window.URL.createObje
this.data = {
foo: "xyz"
}
let json2xls = require('json2xls');
var data = json2xls(this.data);
let blob = new Blob([data], { type: "binary" });
let a = angular.element("a");
a.attr("href", this.$window.URL.createObjectURL(blob));
a.attr("download", "myfile.xlsx");
a[0].click();
它确实创建并下载了一个文件,但excel无法打开它。
我确信下面的转换方法是有效的,因为我可以将此.data
发送到服务器,使用fs.writeFile()
保存它,然后下载此文件
var data = json2xls(this.data);
如何将JSON解析为XLS,然后在浏览器中将其另存为XLS?这可以在服务器端完成:
- 安装exceljs
- 然后,您可以通过以下方式生成文件:
从“exceljs”导入Excel代码>
WebApp.connectHandlers.use('/your-download-url', function(req, res, next) {
// Use params to specify parameters for the xls generation process...
const params = req.url.split('/');
// ... for example /your-download-url/your-user-id
// params[0] will be 'your-download-url'
const user = Meteor.users.findOne(params[1]);
const workbook = new Excel.stream.xlsx.WorkbookWriter({});
workbook.created = new Date();
workbook.modified = new Date();
const sheet = workbook.addWorksheet('Your sheet name');
res.writeHead(200, {
'Content-Disposition': `attachment;filename=${filename}`,
'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
});
workbook.stream.pipe(res);
const headers: [
{ header: 'Column 1', key: 'col1', width: 20 },
{ header: 'Column 2', key: 'col2', width: 15 },
];
sheet.columns = headers;
// User sheet.addRow(rowData) to add each row in your sheet.
workbook.commit();
});
你有没有特别的错误?也许是mime类型的问题?我还建议在文本编辑器中打开.xlsx,甚至可以在那里输入XML,看看它是否有效。也许你必须对JSON格式做些什么,才能使它与json2xls
一起工作。我确实喜欢你介绍的内容,而且它可以工作,但前提是我将此url直接放到浏览器中。当我尝试使用$http下载它时,下载成功,但文件大了两倍,因此excel无法打开它:this.$http({method:“GET”,url:“/foo”,})。然后((response)=>{var file=new file([response.data],“hello world.xlsx”,{type:“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”});fileSaver.saveAs(file);})