上传解析 Excel 表(XLSX 文件)转为JSON数据

1. 安装 xlsx 库

首先,你需要安装 xlsx 库。你可以使用 npm 或 yarn 来安装:

复制代码
npm install xlsx

或

复制代码
yarn add xlsx

2. 导入 xlsx 库

在你的 Vue 组件中导入 xlsx 库:

javascript 复制代码
import * as XLSX from 'xlsx';

3. 读取文件内容

为了读取文件内容,你可以使用 FileReader API。以下是一个完整的示例,展示了如何读取文件并解析 XLSX 文件。

4. 示例代码

以下是一个完整的 Vue 组件示例,展示了如何使用 xlsx 库解析 XLSX 文件:

javascript 复制代码
<template>
  <div>
    <input type="file" @change="handleFileUpload" accept=".xlsx, .xls" /> <!-- 文件输入元素,当文件选择变化时调用 handleFileUpload 方法 -->
    <pre>{{ parsedData }}</pre> <!-- 显示解析后的数据 -->
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue'; // 导入 Vue 的 defineComponent 和 ref 函数
import * as XLSX from 'xlsx'; // 导入 xlsx 库

export default defineComponent({
  setup() {
    const parsedData = ref([]); // 定义一个响应式引用 parsedData,初始值为空数组

    const handleFileUpload = (event: Event) => {
      const target = event.target as HTMLInputElement; // 将事件目标转换为 HTMLInputElement 类型
      const file = target.files && target.files[0]; // 获取用户选择的第一个文件
      if (file) { // 如果文件存在
        const reader = new FileReader(); // 创建 FileReader 对象
        reader.onload = (e) => { // 当文件读取完成后执行的回调函数
          const data = new Uint8Array(e.target?.result as ArrayBuffer); // 将文件内容转换为 Uint8Array
          const workbook = XLSX.read(data, { type: 'array' }); // 使用 xlsx 库解析文件内容为工作簿对象
          const worksheet = workbook.Sheets[workbook.SheetNames[0]]; // 获取工作簿中的第一个工作表
          const result = XLSX.utils.sheet_to_json(worksheet) as Array<Recordable>; // 将工作表转换为 JSON 格式的数据
          console.log('最终解析的 json 格式数据:'); // 输出日志,表示即将打印解析后的数据
          console.log(result); // 打印解析后的 JSON 数据
          parsedData.value = result; // 将解析后的数据赋值给 parsedData
        };
        reader.readAsArrayBuffer(file); // 以 ArrayBuffer 格式读取文件内容
      }
    };

    return {
      parsedData, // 返回 parsedData 以便在模板中使用
      handleFileUpload // 返回 handleFileUpload 方法以便在模板中使用
    };
  }
});
</script>

6. 解释

  1. 文件输入元素 :定义一个文件输入元素,当文件选择变化时调用 handleFileUpload 方法。
  2. 显示解析后的数据 :使用 <pre> 标签显示 parsedData 的内容。
  3. 导入 Vue 的 defineComponent 和 ref 函数 :导入 Vue 的 defineComponent 和 ref 函数。
  4. 导入 xlsx 库 :导入 xlsx 库。
  5. 定义组件 :使用 defineComponent 定义一个 Vue 组件。
  6. 设置组件逻辑 :在 setup 函数中编写组件逻辑。
  7. 定义一个响应式引用 parsedData,初始值为空数组 :使用 ref 创建一个响应式引用 parsedData,初始值为空数组。
  8. 定义 handleFileUpload 方法:定义一个处理文件上传的方法。
  9. 将事件目标转换为 HTMLInputElement 类型 :将事件目标转换为 HTMLInputElement 类型。
  10. 获取用户选择的第一个文件:从事件目标中获取用户选择的第一个文件。
  11. 如果文件存在:检查文件是否存在。
  12. 创建 FileReader 对象 :创建 FileReader 对象。
  13. 当文件读取完成后执行的回调函数 :定义 onload 回调函数,当文件读取完成后执行。
  14. 将文件内容转换为 Uint8Array :将文件内容转换为 Uint8Array。
  15. 使用 xlsx 库解析文件内容为工作簿对象 :使用 XLSX.read 方法将文件内容解析为工作簿对象。
  16. 获取工作簿中的第一个工作表:从工作簿对象中获取第一个工作表。
  17. 将工作表转换为 JSON 格式的数据 :使用 XLSX.utils.sheet_to_json 方法将工作表转换为 JSON 格式的数据,并将其类型断言为 Array<Recordable>。
  18. 输出日志,表示即将打印解析后的数据:在控制台中输出日志,表示即将打印解析后的数据。
  19. 打印解析后的 JSON 数据:在控制台中打印解析后的 JSON 数据。
  20. 将解析后的数据赋值给 parsedData :将解析后的数据赋值给 parsedData。
  21. 以 ArrayBuffer 格式读取文件内容 :使用 readAsArrayBuffer 方法以 ArrayBuffer 格式读取文件内容。
  22. 返回 parsedData 以便在模板中使用 :返回 parsedData 以便在模板中使用。
  23. 返回 handleFileUpload 方法以便在模板中使用 :返回 handleFileUpload 方法以便在模板中使用。

这样可以更清晰地理解每行代码的作用,并且确保你能够正确使用 xlsx 库来解析 XLSX 文件。

相关推荐
福兮说6 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理7 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6667 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
凤城老人7 小时前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
Dovis(誓平步青云)8 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan8 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_9 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒9 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技9 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu10 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub