vue项目使用xlsx-style导出自定义格式excel

在Vue项目中,遇到使用xlsx-style导出Excel时,自定义格式的合并单元格边框显示不完整的问题。解决方案是拆分合并单元格,并循环赋值边框属性。提供了一个DEMO及最终实现效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.遇到问题

1.给自定义格式的excel中的合并单元格加边框的时候,出现边框不完整的情况.

解决:将该合并单元格拆分成最小单位的单元格,设置其边框属性. 直接赋值的话不可行,因为子单元格并没有边框属性,只有合并单元格才有, 这里使用的方法是:记录合并单元格的属性信息, 然后循环对子单元格赋值.
代码:

function addRangeBorder(range,ws){
	let arr = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
    
	range.forEach(item=>{
		let startColNumber = Number(item.s.r), endColNumber = Number(item.e.r);
		let startRowNumber = Number(item.s.c), endRowNumber = Number(item.e.c);
		const test = ws[arr[startRowNumber] + (startColNumber + 1)];
		for(let col = startColNumber ; col <= endColNumber ; col++)
		{
			for(let row = startRowNumber; row <= endRowNumber ; row++)
			{
				//const test = ws[arr[j] + i];
				//console.log(arr[row] + (col + 1));
				ws[arr[row] + (col + 1)] = test;
				//{s:{border:{top:{style:'thin'}, left:{style:'thin'},bottom:{style:'thin'},right:{style:'thin'}}}};
			}
		}
	})
	return ws;
}

二.DEMO

一个完整的例子:

import FileSaver from 'file-saver'
import XLSX from 'xlsx-style'
 
 // 设置表格中cell默认的字体,居中,颜色等

var defaultCellStyle = {
 			font: {
 				name: "宋体", sz: 11, color: { auto: 1 } ,
 			},
 			border: {
 				color: { auto: 1 },
				top: { style: 'thin' },
				bottom: { style: 'thin'},
				left: { style: 'thin' },
				right: { style: 'thin' }
 			},
 			alignment: {
 				/// 自动换行
 				wrapText: 1,
 					// 居中
 				horizontal: "center",
### 如何在 Vue3 项目使用 `xlsx-style` 库 #### 安装依赖包 为了能够在 Vue3 项目使用 `xlsx-style`,首先需要安装必要的 npm 包。通过命令行工具执行如下指令来完成安装: ```bash npm install xlsx xlsx-style file-saver ``` 这三条命令分别用于下载处理 Excel 文件的核心库、支持样式功能的扩展以及保存文件到本地的功能[^1]。 #### 导入并初始化模块 接着,在项目的入口文件或者组件内部引入这些模块,并定义导出Excel的方法: ```javascript import XLSX from 'xlsx'; import { write, utils } from 'xlsx-style'; // 使用带样式的写入方法 import FileSaver from 'file-saver'; const exportToExcel = (data) => { const ws = utils.json_to_sheet(data); // 设置单元格样式 ws['A1'].s = { font: { bold: true }, fill: { fgColor: { rgb: "FFCC00" }} }; const wb = utils.book_new(); utils.book_append_sheet(wb, ws, "SheetJS"); /* generate an XLSX file */ write(wb, { bookType: 'xlsx', type: 'array' }).then((outputArrayBuffer) => { const blob = new Blob([outputArrayBuffer], {type:"application/octet-stream"}); FileSaver.saveAs(blob, "sheetjs.xlsx"); }); }; ``` 上述代码片段展示了如何创建一个简单的函数 `exportToExcel()` 来接收数据作为参数,将其转换成工作表对象后应用特定格式化设置再最终生成可下载的工作簿文件。 #### 调用导出函数 最后一步是在适当的地方调用此函数传递所需的数据集即可触发文件下载动作。比如可以在按钮点击事件处理器内实现这一点: ```vue <template> <button @click="handleExport">导出</button> </template> <script setup> // ...省略其他导入语句... function handleExport() { const sampleData = [ {"姓名": "张三", "年龄": 25}, {"姓名": "李四", "年龄": 30} ]; exportToExcel(sampleData); } </script> ``` 这段模板和脚本部分共同构成了完整的交互逻辑——当用户单击按钮时会触发展示带有自定义样式的Excel表格文件下载操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值