如何使用ExcelJS获取公式单元格计算值?返回公式而非显示值
解决ExcelJS读取公式单元格计算值及hot-formula-parser解析返回null的问题
方案1:让ExcelJS直接返回计算后的值
ExcelJS支持读取时直接获取单元格的计算结果,只需在readFile方法中添加配置项cellValues: 'computed',无需额外解析公式就能拿到单元格显示值:
var Excel = require('exceljs'); let workbook = new Excel.Workbook(); workbook.xlsx.readFile('test.xlsx', { cellValues: 'computed' }).then(function() { var worksheet = workbook.getWorksheet(2); var row = worksheet.getRow(1); console.log(row.getCell(3).value); // 直接得到计算后的结果 });
方案2:修复hot-formula-parser解析返回null的问题
解析返回null是因为公式里引用了$A1、$B1、$E1这些单元格,但parser不知道这些单元格对应的值。需要给parser注册单元格引用的解析规则,把对应单元格的值传入:
var Excel = require('exceljs'); let workbook = new Excel.Workbook(); var FormulaParser = require('hot-formula-parser').Parser; var parser = new FormulaParser(); let worksheet; // 注册单元格引用的解析逻辑 parser.on('callCellValue', function(cellCoord, done) { // 根据坐标获取对应单元格的值 var cell = worksheet.getCell(cellCoord.row, cellCoord.column); done(cell.value); }); workbook.xlsx.readFile('test.xlsx').then(function() { worksheet = workbook.getWorksheet(2); var row = worksheet.getRow(1); var formula = row.getCell(3).formula; // 此时解析即可得到正确结果 console.log(parser.parse(formula).result); });
注意:如果$E1单元格为空,IFERROR会返回空字符串,这和你看到的cell.text为blank一致。确保$E1有值的话,解析结果会更符合预期。
内容的提问来源于stack exchange,提问作者Vijay Babu
相关产品推荐
相关产品推荐

