当前位置: 首页 > news >正文

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

文章目录

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

场景

需要:

  • 下载一个固定模板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
}
http://www.rkmt.cn/news/7978.html

相关文章:

  • 解码C语言关键字
  • Windows环境中安装Zookeeper
  • ​​电流探头选型技术指南:精准捕获电流信号的艺术​​
  • slurm启动验证命令
  • 实用指南:LeetCode //C - 836. Rectangle Overlap
  • 深入解析:[Android] 安卓手机翻页时钟Flip Clock - World Clock v1.5.0.0
  • 深入解析:多模态大模型3:TAViS
  • 基于STM32F103C8T6与DS18B20的温度测量系统
  • Oxygen Forensic Detective 18.0 发布,新增功能简介
  • Windows如何美化cmd窗口
  • MX Round 7 解题报告
  • 实用指南:售价3499美元,英伟达Jetson Thor实现机器人与物理世界的实时智能交互
  • 逻辑回归 vs 支持向量机 vs 随机森林:哪个更适合小数据集? - 指南
  • 券多多系统-开发记录
  • US$189 Yanhua Mini ACDP Module3 Read amp; Write BMW DME ISN Code by OBD
  • React 状态丢失:组件 key 用错引发的渲染异常 - 指南
  • 快速实现 Excel 表格转 SVG:Java 教程 - E
  • PolarFire SoC QSPI 代码编写 测试
  • C++中类的内存存储
  • 做题
  • SchemaStore
  • Visual Studio 2026 Insiders 重磅发布:AI 深度集成、性能飞跃、全新设计
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-29- 操作单选和多选按钮 - 下篇(详细教程) - 北京
  • 自定义注解实现服务分处理-策略模式
  • 远程控制应用的中的全球节点功能如何开启?插件类型、并发数量怎么选?
  • openEuler 24.03 (LTS-SP2)安装mysql 8.0.41
  • 7.数据库归档异常检查与处理
  • AI 赋能 APP 界面设计公司:从美学到交互的智能升级
  • Microsoft AI Genius 限时挑战赛:实战开启,等你应战!
  • 3.sysaux tablesace 清理