如何使用XLSX.js为Excel的姓名列添加背景色样式
如何使用XLSX.js为Excel的姓名列添加背景色样式
嘿,我懂你现在的需求啦——已经能顺利用XLSX把JSON数组转成Excel,但想给nombre(姓名)这一列加上特殊背景色来突出显示对吧?
首先得说清楚:XLSX的核心库本身并不支持直接设置单元格样式,它主要负责数据的导入导出。不过我们可以用xlsx-style这个扩展包(它是XLSX的一个分支,专门增加了样式支持)来实现这个功能。下面是修改后的完整代码,我会一步步给你解释:
第一步:安装依赖
先把xlsx-style装到你的项目里:
npm install xlsx-style
第二步:修改你的代码
替换原来的XLSX引用,然后添加样式设置的逻辑:
const XLSX = require('xlsx-style'); // 替换成xlsx-style async function JsonToExcel() { const archivo = [ { nombre: "Tomas", edad: 22, secundaria: true }, { nombre: "Cristian", edad: 23, secundaria: false }, { nombre: "Rodrigo", edad: 28, secundaria: true }, { nombre: "Romina", edad: 27, secundaria: false } ]; // 生成文件名用的时间字符串 const fecha = new Date(); const fechatotal = `${fecha.getDate()}-${fecha.getMonth() + 1}-${fecha.getFullYear()}_${fecha.getHours()}-${fecha.getMinutes()}-${fecha.getSeconds()}`; // 创建工作簿和工作表 const workbook = XLSX.utils.book_new(); const worksheet = XLSX.utils.json_to_sheet(archivo); // ------------------- 新增:设置姓名列背景色 ------------------- // 1. 找到姓名列对应的列字母(比如A列) const headerRange = worksheet['!ref'].split(':')[0]; // 拿到表头的第一个单元格,比如A1 const nombreCol = headerRange.replace(/[0-9]/g, ''); // 提取列字母A // 2. 获取整个工作表的单元格范围 const range = XLSX.utils.decode_range(worksheet['!ref']); // 3. 遍历姓名列的所有单元格,设置背景色 for (let row = range.s.r; row <= range.e.r; row++) { const cellAddress = `${nombreCol}${row + 1}`; // Excel行号从1开始,所以要+1 if (worksheet[cellAddress]) { // 设置样式:浅黄背景(RGB值要去掉#,大写) worksheet[cellAddress].s = { fill: { fgColor: { rgb: 'FFFFCC' } } }; } } // ------------------- 样式设置结束 ------------------- // 将工作表添加到工作簿 XLSX.utils.book_append_sheet(workbook, worksheet, "Hoja1", true); // 保存文件 const nombreArchivo = `unificado-${fechatotal}.xlsx`; const rutaArchivo = `api_operaciones/files/unificados/${nombreArchivo}`; XLSX.writeFile(workbook, rutaArchivo); return nombreArchivo; }
关键说明:
- 我们通过解析工作表的
!ref属性,自动找到nombre列对应的列位置,这样就算后续JSON结构里字段顺序变了,代码也能自动适配,不用硬写A列。 - 样式对象
s里的fill.fgColor.rgb需要传入不带#的大写RGB值,比如FFFFCC对应浅黄色,你可以根据需要换成其他颜色(比如E6F7FF是浅蓝色)。 - 如果你的项目是浏览器环境,
xlsx-style的使用方式和Node环境略有不同,但核心的样式设置逻辑是一样的。
另外,如果不想替换现有XLSX包,也可以先用XLSX生成文件,再用exceljs这类库打开文件后添加样式,但xlsx-style的方式更直接,一步到位。
备注:内容来源于stack exchange,提问作者Kike gonzalez
相关产品推荐
相关产品推荐

