在IE中使用Angular2中的XLSX

时间:2017-09-19 20:11:33

标签: javascript angular typescript internet-explorer xlsx

我想分享这个,因为我花了几个小时通过查看各个帖子来整理细节。

任务: 使用XLSX作为Angular2项目的一部分,导入xls,xlsx或csv类型文件以生成报告。

问题: IE不支持readAsBinaryString,并且在其他Web浏览器不会生成错误时会产生错误

解决方案: 如果不存在,则手动为readAsBinaryString创建原型函数。

守则: 将以下函数之一添加到尝试读取该文件并使用“readAsBinaryString”的组件。我建议#2,但两者似乎都有效。

选项1:

  IECheck(): void {
    if (FileReader.prototype.readAsBinaryString === undefined) {
      FileReader.prototype.readAsBinaryString = function (fileData) {
        let binary = '';
        const pt = this;
        const reader = new FileReader();
        reader.onload = function (e) {
          const bytes = new Uint8Array(reader.result);
          const length = bytes.byteLength;
          for (let i = 0; i < length; i++) {
            binary += String.fromCharCode(bytes[i]);
          }
          const f = {target: {result: binary}};
          pt.onload(f);
        }
        reader.readAsArrayBuffer(fileData);
      }
    }
  }

选项2:

  IECheck(): void {
if (FileReader.prototype.readAsBinaryString === undefined) {
  FileReader.prototype.readAsBinaryString = function (fileData) {
    const pt = this;
    const reader = new FileReader();
    reader.onload = function (e) {
       const blobURL = URL.createObjectURL(fileData);
       const xhr = new XMLHttpRequest;
       xhr.open('get', blobURL);
       xhr.overrideMimeType('text/plain; charset=x-user-defined');
       xhr.onload = function () {
         const g = {target: {result: xhr.response}};
         pt.onload(g)
       }
       xhr.send();
    }
    reader.readAsArrayBuffer(fileData);
  }
}

}

在构造函数或OnInit(如果使用生命周期钩子)中调用IECheck函数

  this.IECheck();

结果: XLXS将在IE上传文件

让我知道你对此的想法,快乐编码!

0 个答案:

没有答案