【问题标题】:Error in converting excel data to Json string. FileReader.onload not working将 Excel 数据转换为 Json 字符串时出错。 FileReader.onload 不工作
【发布时间】:2019-08-10 06:48:07
【问题描述】:

我正在使用 XLSX npm 包从 Excel 中读取数据并转换为 JSON 格式

我正在使用 Angular 7。

     const reader = new FileReader();
     const file = ev.target.files[0];
     reader.onload = (event) => {
       const data = reader.result;
       console.log(data);
       workBook = XLSX.read(data, { type: 'binary' });
       jsonData = workBook.SheetNames.reduce((initial, name) => {
         const sheet = workBook.Sheets[name];
         initial[name] = XLSX.utils.sheet_to_json(sheet);
         return initial;
       }, {});
       const dataString = JSON.stringify(jsonData);
     };

尝试使用 reader.onloadreader.onloadend,它甚至没有抛出错误,但事件没有触发。 任何人都可以帮助如何使它工作? 提前致谢。

【问题讨论】:

    标签: angular angular7 npm-install filereader openxlsx


    【解决方案1】:

    这里正在工作Example

     onFileChange(ev) {
        let workBook = null;
        let jsonData = null;
        const reader = new FileReader();
        const file = ev.target.files[0];
        reader.onload = (event) => {
          const data = reader.result;
          workBook = XLSX.read(data, { type: 'binary' });
          jsonData = workBook.SheetNames.reduce((initial, name) => {
            const sheet = workBook.Sheets[name];
            initial[name] = XLSX.utils.sheet_to_json(sheet);
            return initial;
          }, {});
          const dataString = JSON.stringify(jsonData);
          document.getElementById('output').innerHTML = dataString.slice(0, 300).concat("...");
          this.setDownload(dataString);
        }
        reader.readAsBinaryString(file);
      }
    

    【讨论】:

      【解决方案2】:

      事件没有触发,因为您没有在文件对象上调用任何读取方法。您需要在文件对象上调用其中一种读取方法才能触发其中一个事件。

      文件阅读器读取方法是 - https://developer.mozilla.org/en-US/docs/Web/API/FileReader#Methods

      事件处理程序是 - https://developer.mozilla.org/en-US/docs/Web/API/FileReader#Event_handlers

      您可以通过单击其中一种方法来阅读有关阅读器方法用法的更多信息,例如- https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL

      基本上,在您的代码中,您只需要在末尾添加一些读取方法,例如 -

           const reader = new FileReader();
           const file = ev.target.files[0];
           reader.onload = (event) => {
             const data = reader.result;
             console.log(data);
             workBook = XLSX.read(data, { type: 'binary' });
             jsonData = workBook.SheetNames.reduce((initial, name) => {
               const sheet = workBook.Sheets[name];
               initial[name] = XLSX.utils.sheet_to_json(sheet);
               return initial;
             }, {});
             const dataString = JSON.stringify(jsonData);
           };
      
          // ADD THIS IN YOUR CODE
          reader.readAsDataURL(file);
      

      【讨论】:

        猜你喜欢
        • 2012-07-29
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        • 2021-03-19
        相关资源
        最近更新 更多