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

如何在JSP中导出带表头加粗格式的HTML表格为XLSX文件?

实现SheetJS免费版导出XLSX并设置表头加粗

我懂你的困扰——SheetJS专业版才能直接调用样式API,但免费版其实也能通过手动修改单元格的样式属性来实现表头加粗,完全不用付费。下面是修改后的TableToExcel函数,我标注了新增的关键代码:

function TableToExcel(tableid) { 
  var wb = XLSX.utils.book_new(); 
  var ws1 = XLSX.utils.table_to_sheet(document.getElementById(tableid)); 

  // 新增:给表头行设置加粗样式
  // 1. 解析工作表的单元格范围
  var range = XLSX.utils.decode_range(ws1['!ref']);
  // 2. 表头对应表格的第一行(SheetJS行号从0开始计数)
  var headerRowIndex = range.s.r;
  // 3. 遍历表头行的每一列
  for(var colIndex = range.s.c; colIndex <= range.e.c; colIndex++) {
    // 生成当前单元格的地址(比如A1、B1这类格式)
    var cellAddress = XLSX.utils.encode_cell({r: headerRowIndex, c: colIndex});
    // 确保单元格对象存在,避免空单元格报错
    if(!ws1[cellAddress]) ws1[cellAddress] = {v: ''};
    // 添加加粗样式:s字段是SheetJS存储单元格样式的属性
    ws1[cellAddress].s = {
      font: {bold: true}
    };
  }

  XLSX.utils.book_append_sheet(wb,ws1,"Sheet 1"); 
  var wbout = XLSX.write(wb, {bookType:'xlsx', bookSST:true, type: 'binary'}); 
  saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), 'RRHH.xlsx'); 
} 

function s2ab(s) { 
  var buf = new ArrayBuffer(s.length); 
  var view = new Uint8Array(buf); 
  for (var i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; 
  return buf; 
}

关键逻辑说明:

  • 先通过XLSX.utils.decode_range解析工作表的!ref属性,拿到整个表格的单元格范围(起始行、起始列、结束行、结束列)。
  • 表头默认是表格的第一行,对应range.s.r(SheetJS里行号从0开始)。
  • 遍历表头行的每一列,给每个单元格添加s属性——这是SheetJS用来存储单元格样式的字段,font.bold: true就代表字体加粗。
  • 额外做了空单元格判断,避免因为表头里有空白单元格导致报错。

这样修改后,导出的XLSX文件表头就会是加粗样式了,全程用SheetJS免费版实现,完全符合你的需求~

内容的提问来源于stack exchange,提问作者AnselVP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:26:35