Vue 使用 xlsx 插件导出 excel 文件

安装与引入

安装

npm install xlsx
npm install file-saver
# 或者
yarn add xlsx
yarn add file-saver

引入

import * as XLSX from 'xlsx';
import FileSaver from 'file-saver'

基本功能

读取 Excel 文件

// 读取文件内容
const workbook = XLSX.readFile('path/to/file.xlsx');// 获取第一个工作表
const firstSheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[firstSheetName];// 将工作表转换为 JSON 格式
const data = XLSX.utils.sheet_to_json(worksheet);
console.log(data);

写入 Excel 文件

// 创建工作簿
const workbook = XLSX.utils.book_new();// 创建工作表
const data = [['Name', 'Age', 'Email'],['Alice', 25, 'alice@example.com'],['Bob', 30, 'bob@example.com']
];
const worksheet = XLSX.utils.aoa_to_sheet(data);// 将工作表添加到工作簿
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');// 导出文件
XLSX.writeFile(workbook, 'output.xlsx');

高级功能

自定义样式

// 创建样式
const ws = XLSX.utils.aoa_to_sheet(data);
const wscols = [{ wch: 15 },{ wch: 10 },{ wch: 30 }
];
ws['!cols'] = wscols;// 添加样式
const cell = ws['A1'];
cell.s = {font: { bold: true },fill: { fgColor: { rgb: 'FF0000' } }
};

合并单元格

// 合并单元格
ws['!merges'] = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 2 } } // 合并 A1:C1
];

添加水印

// 添加水印
XLSX.utils.sheet_add_aoa(ws, [['Watermark']], { origin: -1 });

使用示例

导出数据到 Excel 方法

import * as XLSX from 'xlsx';
import FileSaver from 'file-saver';export function exportJsonToExcel(options) {// 默认配置const defaultOptions = {sheetName: 'Sheet1',autoWidth: true,watermark: ''};const { header, data, filename, sheetName, autoWidth, watermark } = {...defaultOptions,...options};// 1. 创建工作簿const wb = XLSX.utils.book_new();// 2. 处理数据(添加表头)const exportData = [header, ...data];// 3. 创建工作表const ws = XLSX.utils.aoa_to_sheet(exportData);// 4. 自动设置列宽if (autoWidth) {const colWidths = header.map((_, colIndex) => {return {wch: Math.max(...exportData.map(row => {const cellValue = row[colIndex];if (cellValue == null) return 10;return String(cellValue).replace(/[^\x00-\xff]/g, 'aa').length * 8 + 2;}))};});ws['!cols'] = colWidths;}// 5. 添加水印if (watermark) {if (!ws['!merges']) ws['!merges'] = [];ws['!merges'].push({s: { r: exportData.length + 1, c: 0 },e: { r: exportData.length + 1, c: header.length - 1 }});XLSX.utils.sheet_add_aoa(ws, [[watermark]], { origin: -1 });}// 6. 将工作表添加到工作簿XLSX.utils.book_append_sheet(wb, ws, sheetName);// 7. 导出文件const excelBuffer = XLSX.write(wb, {bookType: 'xlsx',type: 'array'});const blob = new Blob([excelBuffer], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});FileSaver.saveAs(blob, `${filename}.xlsx`);
}
参数说明

header:表头数组,包含列名。

data:数据数组,包含要导出的数据。

filename:导出的 Excel 文件名。

sheetName:工作表名称,默认为 Sheet1。

autoWidth:是否自动调整列宽,默认为 true。

watermark:水印文本,默认为空字符串。

使用
import { exportJsonToExcel } from "@/utils/index";// 导出Excel
const exportExcel = () => {const header = ["时间","类型","地址","ID",];const data = tableData.value.map((item) => [item.time,item.type,item.address,item.id,]);exportJsonToExcel({header,data,filename: "excel名",});
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/75815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulntarget_a 训练笔记

win 7 权限 利用任意文件上传 getshell POST /module/ueditor/php/action_upload.php?actionuploadfile HTTP/1.1 User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html) Accept: */* Accept-Language: zh-CN,zh;q0.9 Connectio…

无人机螺旋桨平衡标准

螺旋桨平衡是确保无人机(UAV)平稳运行、可靠性和使用寿命的关键过程。螺旋桨的不平衡会导致振动、噪音,并加速关键部件的磨损,从而对飞行性能产生负面影响。 ISO 21940-11:2016标准为旋翼平衡提供了一个广泛引用的框架,定义了可接受的不平衡…

既生瑜何生亮?Nginx RTMP 模块与 SRS RTMP服务器技术对比

在实时视频流的场景中,RTMP 协议作为一种传统且高效的流媒体传输协议,广泛应用于各类直播和点播系统。两款流行的开源 RTMP 服务器分别是基于 Nginx 的 Nginx RTMP 模块 和 SRS(Simple Real-Time Server)。这两者都在流媒体行业有…

MATLAB 批量移动 TIF 文件至分类文件夹

文章目录 前言一、步骤二、代码 前言 本代码用于从指定的源文件夹 (sourceFolder) 中筛选所有 .tif 文件,并根据文件名的特定关键词(Daynight 和 FDI)将其分类移动到相应的目标文件夹 (targetDaynightFolder 和 targetFDIFolder)。 一、步骤…

重温Ubuntu 24.04 LTS

用户调整 # 创建新用户 sudo adduser newusername # 设置新用户的密码 sudo passwd newusername # 将新用户添加到 sudo 组 sudo usermod -aG sudo newusername # 修改ssh访问权限 sudo nano /etc/ssh/sshd_config # 将新用户加入,此时root将无法访问 AllowUsers n…

AWS Lambda 集成更新详解:打造无缝云函数体验

引言 AWS Lambda 作为一种无服务器计算服务,让开发者能够运行代码而无需配置或管理服务器。随着 AWS 不断优化其服务,Lambda 的集成方式也在不断更新和改进。本文将深入探讨 Lambda 的最新集成选项,帮助您充分利用这一强大的无服务器计算平台。 Lambda 集成类型概述 从图…

基于Kubernetes部署Prometheus监控平台

#作者:stackofumbrella 文章目录 prometheus和k8s集群版本对照表架构Prometheus Operator简介kube-prometheus下载地址 安装修改镜像地址修改Prometheus的service修改Grafana的service修改Alertmanager的service数据持久化执行安装 Prometheus验证Grafana验证解决C…

Android之uCrop (裁剪) 的基本使用资料

Android 拍照、选择图片并裁剪 uCrop裁剪 uCrop裁剪2 uCrop裁剪3 1.权限检查 private static final int REQUEST_CAMERA_PERMISSION 333; private void requestCameraPermission() {if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)! …

STM32基础教程——输入捕获模式测量PWM频率

目录 前言 技术实现 原理图 连线图 代码实现 内容要点 PWM基本结构 开启外设时钟 配置GPIO端口 配置时基单元 初始化输出比较单元 输出比较通道重映射 输入捕获功能初始化 计算捕获PWM的频率 实验结果 问题记录 前言 IC(Input Capture)输…

基于网启PXE服务器的批量定制系统平台(详细版)

项目说明 该项目共分为2个子项目,由iventoy和定制安装两部分组成 该项目旨在复习巩固系统服务部署使用、shell编程等知识,旨在让学生增加知识面,提高项目实习经历,充实简历 项目背景: 公司新购了一批服务器和台式机…

旅游CMS选型:WordPress、Joomla与Drupal对比

内容概要 在旅游行业数字化转型进程中,内容管理系统(CMS)的选择直接影响网站运营效率与用户体验。WordPress、Joomla和Drupal作为全球主流的开源CMS平台,其功能特性与行业适配性存在显著差异。本文将从旅游企业核心需求出发&…

el-table下的复选框关联勾选

效果展示&#xff1a; <el-table style"height: 500px;" :data"tableData" border empty-text"暂无数据" v-loading"loading":header-cell-style"{ text-align: center }" :cell-style"{ text-align: center }"…

解决Cubemx生产的 .ioc文件不能外部打开的方法

正常来说&#xff0c;cubemx生成的文件会有图标 但是当图标白色的时候&#xff0c;无法通过直接点击这个文件进入cubemx 1.首先检查java环境是不是装的JAVA8&#xff0c;如果是的话进行第二步操作&#xff1b; 2.重新安装一次cubemx&#xff0c;在安装的时候选择为我安装&…

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.1.3分布式数据加载与并行处理(PyTorch DataLoader优化)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.1.3 分布式数据加载与并行处理(`PyTorch DataLoader`优化)1. 大规模数据加载的挑战与瓶颈分析1.1 数据加载流程的时间分解2. PyTorch DataLoader的深度优化策略2.1 核心参数调优2.2 分布式数据分片策…

K8S学习之基础五十七:部署代码扫描工具sonarqube

部署代码扫描工具sonarqube 拉取postgres、sonarqube镜像&#xff0c;在harbor上创建postgres、sonarqube项目&#xff0c;将镜像上传至harbordocker pull postgres docker pull sonarqube docker tat postgres:latest 172.16.80.140/postgres/postgres:latest docker tat sona…

RAG技术的进化:RQ-RAG查询优化/化繁为简Adaptive-RAG智能分类/精准出击

嘿,亲爱的算法探险家们!欢迎来到RAG技术的“奇幻冒险”之旅!🎢 今天,咱们要一起探索的是如何让大语言模型(LLM)从“呆萌小学生”进化成“机智博士生”的奇妙旅程! 想象一下,你正在和一个超级聪明的AI聊天,但它有时候会像个小迷糊,回答得让你哭笑不得。这时候,RAG…

11:00开始面试,11:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

渗透测试中发现ak/sk泄露时的验证工具

项目地址&#xff1a;https://github.com/libaibaia/cloudsec启动命令&#xff1a;java -jar cloudSec-1.2.2-SNAPSHOT.jar 访问&#xff1a;http://localhost:8000/#/admin/login 默认用户名密码&#xff1a;admin/admin123 注&#xff1a;8000 端口运行&#xff0c;如占用先…

【蓝桥杯】重点冲刺

【最高优先级】必考核心算法(占分60%以上) 动态规划(DP) 🌟🌟🌟 背包问题:01背包、完全背包(必须掌握空间优化的一维写法) 线性DP:最长上升子序列(LIS)、最长公共子序列(LCS) 路径问题:网格路径计数(含障碍物)、最小路径和 经典模型:打家劫舍、股票买卖问…

蓝桥杯python编程每日刷题 day 20

题目&#xff1a; 给定一个长度为 N 的整数序列&#xff1a;A1, A2, , AN。现在你有一次机会&#xff0c;将其中连续的 K 个数修改成任意一个相同值。请你计算如何修改可以使修改后的数列的最长不下降子序列最长&#xff0c;请输出这个最长的长度。 最长不下降子序列是指…