You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:44:13