如何用SheetJS的table_to_sheet实现文本排序?单元格对齐代码无效求助
问题1:如何使用SheetJS的table_to_sheet函数对文本进行排序?
table_to_sheet本身没有内置排序能力,需要先提取表格数据完成排序,再生成工作表,具体步骤如下:
- 先把DOM表格的数据转成可操作的数组(JSON数组或二维数组)
- 对数组按目标列的文本内容排序
- 用排序后的数组重新生成工作表
代码示例:
// 1. 将DOM表格转成二维数组(包含表头) const table = document.getElementById('qat0120MainGrid'); const aoaData = this.$xlsx.utils.table_to_sheet(table); const dataArr = this.$xlsx.utils.sheet_to_json(aoaData, { header: 1 }); // 2. 按第一列文本升序排序(跳过表头行) dataArr.sort((rowA, rowB) => { // 保持表头在第一位 if (rowA === dataArr[0]) return -1; if (rowB === dataArr[0]) return 1; // 文本自然排序,支持多语言 return rowA[0].localeCompare(rowB[0], undefined, { sensitivity: 'base' }); }); // 3. 用排序后的数组生成新工作表 const sortedWorkSheet = this.$xlsx.utils.aoa_to_sheet(dataArr);
问题2:设置单元格A3水平居中无效的问题排查与解决
你的代码失效主要有两个核心原因,对应解决方案如下:
原因1:A3单元格未初始化(无数据)
table_to_sheet只会为有内容的单元格创建对象,如果原网页表格中A3是空的,workSheet['A3']会是undefined,直接赋值样式不会生效。需要先初始化该单元格:
// 检查并初始化A3单元格 if (!workSheet['A3']) { workSheet['A3'] = { t: 's', v: '' }; // t=单元格类型(s表示字符串),v=单元格值 } // 再设置居中样式 workSheet['A3'].s = { alignment: { horizontal: 'center' } };
原因2:使用的SheetJS社区版不支持样式
SheetJS核心社区版(xlsx包)本身不支持单元格样式,若你用的是社区版,即使代码正确也不会生效。此时需要改用支持样式的分支包xlsx-style:
- 替换依赖:
npm uninstall xlsx npm install xlsx-style
- 在Vue项目中替换原
xlsx的引入与全局挂载逻辑 - 重新运行代码即可生效
另外,可通过workSheet['!ref']确认工作表范围是否包含A3,若不包含需手动扩展:
workSheet['!ref'] = this.$xlsx.utils.encode_range({ s: { r: 0, c: 0 }, // 起始单元格A1 e: { r: 2, c: 2 } // 结束单元格C3,确保覆盖A3 });
内容的提问来源于stack exchange,提问作者cyanogen
相关产品推荐
相关产品推荐

