尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

深入解析:【vue+exceljs+file-saver】纯前端:下载excel和上传解析excel

深入解析:【vue+exceljs+file-saver】纯前端:下载excel和上传解析excel
📅 发布时间:2026/6/20 8:15:33

文章目录

    • 场景
    • 依赖
    • 下载
    • 上传并解析

场景

需要:

  • 下载一个固定模板excel
  • 上传一个excel,并解析其内容

参考:前端导出Excel【支持样式配置,多sheet,多级表头】在我们的管理系统项目中,将表格数据导出为Excel文件是很常见 - 掘金

依赖

exceljs file-saver

exceljs - npm — exceljs - npm
file-saver - npm

下载

封装一个下载的方法。

import ExcelJS from 'exceljs'
// @ts-ignore
import saveAs from 'file-saver'
export const exportExcel = (header: string[], data: number[][]) =>
{
// 创建excel工作簿
const workbook = new ExcelJS.Workbook()
const worksheet = workbook.addWorksheet('Sheet1')
// 表头
worksheet.addRow(header)
// 数据
data.forEach((item) =>
{
worksheet.addRow(item)
})
// 生成二进制数据导出
workbook.xlsx.writeBuffer().then((buffer) =>
{
const blob = new Blob([buffer], { type: 'application/octet-stream'
})
saveAs(blob, '模板.xlsx')
})
}

调用:

const handleDownloadTempExcel = () =>
{
const headers = ['序号', '测试剧-章节ID', '对照剧-章节ID']
const datas = [
[0, 75912, 75848],
[1, 75913, 75849],
[2, 75914, 75850],
[3, 75915, 75851],
[4, 75916, 75852],
]
exportExcel(headers, datas)
}

效果:

在这里插入图片描述

上传并解析

上传使用原生的控件。点击按钮,模拟原生控件input 的点击。让input控件隐藏。

<inputref="uploadExcel"hiddentype="file"accept=".xlsx,.xls,.csv"@change="handleUploadChapter"
/>
<el-buttonstyle="margin-left: 8px"type="success"@click="handleClickUpload"
>上传
</el-button>
const handleClickUpload = () =>
{
uploadExcel.value?.click()
}

在这里写上传文件的方法:

const handleUploadChapter = async (event: Event) =>
{
const target = event.target as HTMLInputElement
const files = target.files
if (!files) {
return
}
uploadFile.value = files[0]
const list = await excelToList(uploadFile.value)
// ....
}

将解析excel封装成一个方法:把excel解析成数组。

在这里插入图片描述

export const excelToList = async (file: File) =>
{
const workbook = new ExcelJS.Workbook()
await workbook.xlsx.read(file.stream())
const sheet = workbook.worksheets[0]
const excelData: string[][] = []
sheet.eachRow((row) =>
{
const list: string[] = []
row.eachCell((cell) =>
{
list.push(cell.value?.toString() || '')
})
excelData.push(list)
})
return excelData
}

相关新闻

  • 解码C语言关键字
  • Windows环境中安装Zookeeper
  • ​​电流探头选型技术指南:精准捕获电流信号的艺术​​

最新新闻

  • 2026永州汽车贴膜门店实力排行 - 国麟测评
  • 金得力环保:木百叶定制品牌中的靠谱之选 - mypinpai
  • 2026黑龙江哈尔滨红肠哪家正宗?四家优质品牌总结 - 最新行业资讯
  • 深入解析CAN控制器:从寄存器位到消息调度与滤波机制
  • Siri要接入AI了,苹果手机上一句话让GPT写文案、DeepSeek写代码的时刻来了
  • 从M68HC11E实战解析8位MCU架构:寄存器、外设与低功耗设计

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号