Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从JSON创建和下载.xls文件_Javascript_Angularjs_Json_Meteor_Blob - Fatal编程技术网

Javascript 从JSON创建和下载.xls文件

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

我有以下代码,应该将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.createObjectURL(blob));
a.attr("download", "myfile.xlsx");
a[0].click();
它确实创建并下载了一个文件,但excel无法打开它。 我确信下面的转换方法是有效的,因为我可以将
此.data
发送到服务器,使用
fs.writeFile()
保存它,然后下载此文件

var data = json2xls(this.data);

如何将JSON解析为XLS,然后在浏览器中将其另存为XLS?

这可以在服务器端完成:

  • 安装exceljs
流星npm安装-s 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);})