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

XLSX模块sheet_to_row_object_array方法优先读取w字段值的实现问题

XLSX 模块优先读取格式化值的实现方法

你要实现的需求可以通过调整sheet_to_row_object_array方法的参数直接实现,无需修改模块源码:

  • 核心原理:XLSX.utils.sheet_to_row_object_array是sheet_to_json方法的别名,默认开启raw配置项,会读取单元格原始值v字段,将raw设为false就会优先读取格式化后的w字段值。
  • 注意:你原代码中调用方法时直接传入工作表名称是错误的,该方法第一个参数需要传入工作表对象。

正确代码示例:

var XLSX = require("xlsx");
// 读取工作簿逻辑保持不变
var workbook = XLSX.read(data, { type: "array" });
// 调用方法时新增raw: false配置
var excelRows = XLSX.utils.sheet_to_row_object_array(workbook.Sheets["Current positions"], {
  raw: false
});
console.log(excelRows);

修改后输出结果符合你的预期:

'ISSUER SHARE ISIN code': 'BE0974320526',
'% OF ISSUED CAPITAL': '0.69%',
'POSITION DATE': '11/11/2021'

如果需要自定义取值优先级(比如部分字段要原始值、部分要格式化值),可以手动遍历单元格实现自定义转换:

function customSheetToRow(sheet) {
  // 先获取表头和原始行数据
  const rawRows = XLSX.utils.sheet_to_row_object_array(sheet, { header: 'A' });
  const headerMap = rawRows[0];
  const result = [];
  // 从第二行开始遍历数据行
  for (let rowNum = 1; rowNum < rawRows.length; rowNum++) {
    const currentRow = {};
    for (const colKey in rawRows[rowNum]) {
      const cell = sheet[`${colKey}${rowNum + 1}`];
      // 自定义规则:优先取w字段,不存在则取v字段
      currentRow[headerMap[colKey]] = cell?.w ?? cell?.v;
    }
    result.push(currentRow);
  }
  return result;
}

// 调用自定义方法
var excelRows = customSheetToRow(workbook.Sheets["Current positions"]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:09:00