如何从外部链接(Amazon S3)使用SheetJS解析Excel文件

Dav*_*kee 6 javascript excel xmlhttprequest amazon-s3 meteor

我正在尝试解析我已经拥有URL的excel文件.尝试访问该文件时,我一直遇到不同的错误,以便它可以读取.现在,这是我的代码:

  const input_file = doc.input_file;
  const extension = input_file.split('.').pop();



  let XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
  let oReq = new XMLHttpRequest();
  oReq.open("GET", input_file, true);
  oReq.responseType = "arraybuffer";

  oReq.onload = function(e) {
    let arraybuffer = oReq.responseText;
    /* convert data to binary string */
    let data = new Uint8Array(arraybuffer);
    let arr = new Array();
    for(let i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
    let bstr = arr.join("");

    /* Call XLSX */
    let workbook = XLSX.read(bstr, {type:"binary"});

    /* DO SOMETHING WITH workbook HERE */
    let firstSheet = workbook.SheetNames[0];
    let parsed = XLSX.utils.sheet_to_csv(firstSheet);
    console.log(parsed);
  }

  oReq.send();
Run Code Online (Sandbox Code Playgroud)

我得到的当前错误是:Error: Unsupported file NaN当我尝试读取文件时:let workbook = XLSX.read(bstr, {type:"binary"});

我不确定读取外部链接的最简单方法.有任何想法吗?如果有帮助,我正在使用Meteor.

Dav*_*kee 0

我最终使用了其中一些答案的组合。我想将其发布在这里,以防对其他人有所帮助。

我开始使用 Achal 提到的 Meteor HTTP 包。

meteor add http
Run Code Online (Sandbox Code Playgroud)

我还添加了来自 Meteor 社区的附加包,允许添加响应类型。

meteor add aldeed:http
Run Code Online (Sandbox Code Playgroud)

然后,我使用以下代码转换为二进制并可以继续阅读该表:

HTTP.get(input_file, {responseType: 'arraybuffer'}, function(error, result) {
  let data = new Uint8Array(result.content);
  let arr = new Array();
  for(let i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
  let bstr = arr.join("");

  let workbook = XLSX.read(bstr, {type:"binary"});
  var first_sheet_name = workbook.SheetNames[0];
  let sheet = workbook.Sheets[first_sheet_name];
  let parsed = XLSX.utils.sheet_to_json(sheet);
});
Run Code Online (Sandbox Code Playgroud)