纯前端实现了Excel文件转JSON和JSON转Excel下载

news/2024/7/21 3:48:05 标签: 前端, excel, json

需求前提:

  1. 上传Excel文件,并将Excel文件的内容拿出来转换为JSON
  2. 本地定义JSON数据,然后将它封装后转换为Excel文件下载

安装依赖

这两个功能是借助xlsx包实现的,所以需要先安装xlsx包:

npm install xlxs

依赖引用

import * as XLSX from 'xlsx'

Excel文件上传并转JSON

  1. 实现上传功能
<el-upload
   ref="fileUpload"
   v-model:file-list="form.fileList"
   class="upload-demo"
   action="#"
   multiple
   :limit="1"
   drag
   accept=".xlsx,.xls"
   :auto-upload="false"
>
   <el-icon class="el-icon--upload"><upload-filled /></el-icon>
   <div class="el-upload__text">
       拖拽文件到此处 or <em>点击上传</em>
   </div>
   <template #tip>
       <div class="el-upload__tip">
           支持格式:.xlxs 或 .xls,点击此处 <el-link type="primary" :underline="false" @click="downloadExcelTemplate">下载</el-link> 文件模板
       </div>
   </template>
</el-upload>

说明:

  • 文件使用上传
  • 上述的downloadExcelTemplate方法中,编写JSON转换Excel下载的方法
  1. 编写读取文件的方法
// 上传文件
const readFile = (file) => {
    return new Promise(resolve => {
        let reader = new FileReader()
        reader.readAsBinaryString(file)
        reader.onload = ev => {
            resolve((ev as any).target.result)
        }
    })
}
  1. 文件上传并转JSON
multiUploadFormRef.value.validate(async(valid) => {
    if(valid) {
    	// 调用readFile方法
        let dataBinary = await readFile(form.fileList[0].raw)
        
        let workBook = XLSX.read(dataBinary, { type: 'binary', cellDates: true })
        
        let workSheet = workBook.Sheets[workBook.SheetNames[0]]
        
        // 读取到的Excel的内容,当前已经为JSON格式了
        let data = XLSX.utils.sheet_to_json(workSheet)
        console.log('读取到的excel的内容',data)

        // do something...
        
    }
})

JSON转Excel并下载

在上述定义的downloadExcelTemplate中编写下载方法:

// JSON转Excel并下载
const downloadExcelTemplate = () => {
	// 定义文件名称
    const filename = '模板下载.xlsx'
    
    // 定义Excel内容,这是一个Arrary[]格式的数组,数组的第一个元素为表头,从第二个元素开始,是文件的内容
    const data = [['order','tag','source','resource','request','response','appName','comment','model','imgUrl','accountCode','uid','externalTraceId','internalTraceId','deviceId','knowledgeBaseIds','requestTime']]
    
    // 设置Excel表格的sheet名称
    const ws_name = 'bad_case_feedback'
    
    // 创建新的表格
    const wb = XLSX.utils.book_new()
    
    // 将数据写入定义的sheet中
    const ws = XLSX.utils.aoa_to_sheet(data)
    
    // 上sheet添加到表格中
    XLSX.utils.book_append_sheet(wb, ws, ws_name)
    
    // 写入文件
    XLSX.writeFile(wb, filename)
}

实现效果

  1. Excel转JSON

在这里插入图片描述

  1. JSON转Excel下载

在这里插入图片描述


http://www.niftyadmin.cn/n/5344435.html

相关文章

数据分析-Pandas如何用图把数据展示出来

数据分析-Pandas如何用图把数据展示出来 俗话说&#xff0c;一图胜千语&#xff0c;对人类而言一串数据很难立即洞察出什么&#xff0c;但如果展示图就能一眼看出来门道。数据整理后&#xff0c;如何画图&#xff0c;画出好的图在数据分析中成为关键的一环。 数据表&#xff…

应用案例:Ruff工业设备数据采集,为生产制造企业数字化转型赋能

导读&#xff1a;某金属材料生产制造企业&#xff0c;引进了整套Ruff数据采集方案&#xff0c;将Ruff网关采集到的PLC数据接入到Ruff IoT管理云平台&#xff0c;帮助客户实现覆盖全厂区、车间所有设备的数字化、可视化管理&#xff0c;避免了意外停机风险&#xff0c;IT运维工作…

qml与C++的交互

qml端使用C对象类型、qml端调用C函数/c端调用qml端函数、qml端发信号-连接C端槽函数、C端发信号-连接qml端函数等。 代码资源下载&#xff1a; https://download.csdn.net/download/TianYanRen111/88779433 若无法下载&#xff0c;直接拷贝以下代码测试即可。 main.cpp #incl…

如何使用idm下载百度网盘的资源

IDM是海内外都非常受欢迎的一款下载管理软件。它支持视频媒体嗅探和多线程下载&#xff0c;能够完美替代谷歌Chrome浏览器、Edge浏览器等浏览器的原生下载功能。在浏览器中单击下载链接时&#xff0c;idm将接管浏览器的原生下载工具并加快下载速度&#xff0c;支持HTTP&#xf…

ubuntu怎么安装docker

sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release 添加Docker官方的GPG密钥 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -使用以下命令设置稳定存储库。要添加 夜间或测试存储库&…

电信宽带配置动态域名和端口映射

需求: 家宽映射动态域名访问内网服务 动态域名:18081>电信光猫:18081>Openwrt软路由:18081>主机192.168.3.172:8081 目前网络结构&#xff1a; 电信光猫192.168.1.1 Openwrt软路由192.168.3.1 主机192.168.3.172上8081端口起了一个nginx-docker服务 前置条件&#x…

【笔记】Helm-4 最佳实践-3 模板

模板 最佳实践指南的这部分聚焦于模板。 templates/结构 template/目录结构应该如下&#xff1a; 1、如果生成YAML输出。模板文件应该有扩展名.yaml。扩展名是.tpl可用于生成非格式化内容的模板文件。 2、模板文件名称应该使用横杠符号&#xff08;my-example-configmap.yam…

对 MODNet 网络结构直接剪枝的探索

文章目录 1 写在前面2 遇到问题3 解决方案4 探索过程4.1 方案一4.2 方案二4.3 方案三 5 疑惑与思考5.1 Q15.2 Q2 1 写在前面 在前面的文章中&#xff0c;笔者与小伙伴们分享了对 MODNet 主干网络部分以及其余分支分别剪枝的探索历程&#xff0c;即先分解、再处理、后融合的手法…