在vue中上传和处理excel文件

新手上路,请多包涵

我正在尝试上传一个 xlsx excel 文件并在我的 Vue 应用程序中处理它。但它失败了,抛出了一个错误。这让我觉得我没有正确使用或导入库,因为在节点项目中工作正常。

我正在使用 xlsx 库。

代码

模板

<template>
  <div id="app">
    <input type="file" @change="onChange" />
  </div>
</template>

脚本

import XLSX from "xlsx"

export default {
  name: "App",
  methods: {
    onChange(event) {
      this.file = event.target.files ? event.target.files[0] : null;
      let workbook = XLSX.readFile(this.file);
      console.log('workbook1');
      console.log(workbook);
      console.log('SheetNames');
      console.log(workbook.SheetNames);
    },
  }
};

在这一点上,即使被指向一个正确的库,如果有一个将不胜感激。提前致谢。

这是我的问题代码框:

https://codesandbox.io/s/nervous-montalcini-w3qhy?file=/src/App.vue

原文由 jogarcia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

您首先需要设置一个 FileReader 并将文件作为二进制字符串读取,以便将其传递给 XLSX。

 export default {
  methods: {
    onChange(event) {
      this.file = event.target.files ? event.target.files[0] : null;
      if (this.file) {
        const reader = new FileReader();

        reader.onload = (e) => {
          /* Parse data */
          const bstr = e.target.result;
          const wb = XLSX.read(bstr, { type: 'binary' });
          /* Get first worksheet */
          const wsname = wb.SheetNames[0];
          const ws = wb.Sheets[wsname];
          /* Convert array of arrays */
          const data = XLSX.utils.sheet_to_json(ws, { header: 1 });
        }

        reader.readAsBinaryString(this.file);
      }
    },
  }
};

原文由 wobsoriano 发布,翻译遵循 CC BY-SA 4.0 许可协议

我是通过 read-excel-file npm 包做到的。这是我的代码。

 <template>
...
<input type="file" @change="onFileChange" />
...
</template>
import readXlsxFile from 'read-excel-file'
export default {
...
methods: {
  onFileChange(event) {
    let xlsxfile = event.target.files ? event.target.files[0] : null;
    readXlsxFile(xlsxfile).then((rows) => {
      console.log("rows:", rows)
    })
  }
}

原文由 Wise Invoker 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏