如何在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
相关产品推荐
相关产品推荐

