Excel JS加载模板文件无法获取列key,如何用键值对添加行?
问题分析
你遇到的核心问题是:worksheet.columns中的key属性不会被持久化到Excel文件中,正如官方文档提示的——这只是构建工作簿时的便利配置,除列宽外其他信息不会被保存。因此重新加载文件后,无法通过原有的key来使用键值对形式添加行。
可行解决方案
方案1:重新定义Columns结构
每次加载模板文件后,手动重新设置worksheet.columns,和创建模板时的结构完全一致。这样就能恢复列的key映射,继续使用键值对数组调用addRows:
// 加载模板文件后执行 worksheet.columns = [ { header: 'Id', key: 'id', width: 10 }, { header: 'Name', key: 'name', width: 32 }, { header: 'D.O.B.', key: 'dob', width: 10} ]; // 之后正常使用键值对添加行 const rows = [ {id:1, name: 'Barbara', dob: new Date()}, {id:2, name: 'Barbara 2', dob: new Date()} ]; const newRows = worksheet.addRows(rows);
方案2:手动映射数据为数组
如果不想重复定义columns,可以先确定表头对应的key顺序,再将键值对数据转换成对应顺序的数组,直接添加:
// 与模板列对应的key顺序 const headerKeys = ['id', 'name', 'dob']; // 将键值对数据转换为对应顺序的数组 const rowArrays = rows.map(row => headerKeys.map(key => row[key])); // 添加行 const newRows = worksheet.addRows(rowArrays);
方案3:自定义持久化Key信息
如果需要模板文件本身携带key信息,可以通过以下方式实现:
- 将
key存储在表头单元格的**备注(Comment)**中 - 添加一个隐藏列,专门存储对应列的
key
加载文件时,读取这些自定义存储的信息,重新构建worksheet.columns:
// 示例:从表头单元格备注读取key并重建columns const columns = []; worksheet.getRow(1).eachCell((cell, colIndex) => { const key = cell.comment ? cell.comment.text : null; if (key) { columns.push({ header: cell.value, key: key, width: worksheet.getColumn(colIndex).width }); } }); worksheet.columns = columns; // 之后即可正常使用键值对添加行
内容的提问来源于stack exchange,提问作者Ravi Sigdel
相关产品推荐
相关产品推荐

