-
安装必要的库
npm install xlsx
-
创建一个组件来处理文件上传和解析 :
在src/components
目录下创建一个名为ExcelPreview.vue
的文件javascript<template> <div> <input type="file" @change="handleFileUpload" /> <table v-if="sheetData.length"> <thead><tr><th v-for="(header, index) in sheetData[0]" :key="index">{{ header }}</th></tr></thead> <tbody><tr v-for="(row, rowIndex) in sheetData.slice(1)" :key="rowIndex"><td v-for="(cell, cellIndex) in row" :key="cellIndex">{{ cell }}</td></tr></tbody> </table> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; import * as XLSX from 'xlsx'; const sheetData = ref([]); const handleFileUpload = (event: Event) => { const file = (event.target as HTMLInputElement).files?.[0]; if (file) { const reader = new FileReader(); reader.onload = (e) => { const data = new Uint8Array(e.target?.result as ArrayBuffer); const workbook = XLSX.read(data, { type: 'array' }); const firstSheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[firstSheetName]; sheetData.value = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); }; reader.readAsArrayBuffer(file); } }; </script>
如果excel文件是后台返回的一个链接,需要重新请求解析成ArrayBuffer,
以下是nuxt3 示例:
javascript// 为了解决跨域问题,在server/api 下 创建一个请求api, downloadFileByProxy.ts import { defineEventHandler } from 'h3'; export default defineEventHandler(async event => { const { filePath } = getQuery(event); let matches = filePath?.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i); let domain = matches && matches[1]; return proxyRequest(event,`https://${domain}/`, { fetch: ()=>fetch(filePath), }) })
在
ExcelPreview.vue
文件中:javascriptasync function getFile(path: string) { // download pdf from api to prevent CORS const { _data } = await $fetch.raw(`/api/downloadFileByProxy`, { method: 'get', params: { filePath: path, }, }); let blob = _data; let buffer = await blob?.arrayBuffer(); return buffer; } const debounceRenderHandle = debounce(async () => { bufferCache.value = bufferCache.value || (await getFile(props.path)); // bufferCache这里是用来处理缓存,可以视具体情况加这个变量与否 const data = new Uint8Array(bufferCache.value as ArrayBuffer); const workbook = XLSX.read(data, { type: 'array' }); const firstSheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[firstSheetName]; sheetData.value = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); }, 500);
实现Vue3/Nuxt3 预览excel文件
Bessie2342024-11-01 9:16
相关推荐
宁静_致远22 分钟前
React + TypeScript 开发中的黄金法则storyfull1 小时前
Excel(函数进阶篇):Vlookup函数进阶、TAKE嵌套SORE函数、SUBTOTAL函数、INDIRECT函数大霞上仙1 小时前
excel文件有两列,循环读取文件两列赋值到字典列表。字典的有两个key,分别为question和answer。将最终结果输出到json文件CodeCraft Studio1 小时前
Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加、修改和删除切片器岁岁岁平安1 小时前
SpringBoot3+Vue3实战(Vue3快速开发登录注册页面并对接后端接口)(4)Do1 小时前
性能优化之渲染层优化工作碎碎念1 小时前
Lodash 引入以及常用方法情非得已小猿猿2 小时前
React Hooks主要解决什么徐小夕2 小时前
开源了一款在线电子表格插件,支持一键导入excel文件!小陆猿2 小时前
如何在Web应用中实现Excel文件的前端展示与编辑:基于SheetJS与Handsontable的实战