Closed
Description
🐛 Bug Report
If a formatting rule is setup for a sheet, that references another sheet, an exception is thrown when you call XLSX.writeBuffer
Cell model
looks like this:
{
type: 'expression',
x14Id: '{BB2F621F-E459-4F3E-9A72-51C5F7F3EB5F}',
priority: 42,
ref: 'C16'
}
Exception:
TypeError: Cannot read properties of undefined (reading 'forEach')
at CfRuleXform.renderCellIs (/Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xform/sheet/cf/cf-rule-xform.js:175:20)
at CfRuleXform.render (/Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xform/sheet/cf/cf-rule-xform.js:125:14)
at /Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js:29:25
at Array.forEach (<anonymous>)
at ConditionalFormattingXform.render (/Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js:26:17)
at /Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js:41:20
at Array.forEach (<anonymous>)
at ConditionalFormattingsXform.render (/Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js:40:11)
at WorkSheetXform.render (/Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xform/sheet/worksheet-xform.js:329:36)
at /Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xlsx.js:562:22
at Array.forEach (<anonymous>)
at XLSX.addWorksheets (/Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xlsx.js:560:22)
at XLSX.write (/Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xlsx.js:654:16)
at async XLSX.writeBuffer (/Users/jonathan/baseline/service-2.0/node_modules/exceljs/lib/xlsx/xlsx.js:684:5)
Lib version: 4.3.0
Steps To Reproduce
const workbook = new Excel.Workbook();
await workbook.xlsx.load(file);
await workbook.xlsx.writeBuffer();
The expected behaviour:
The conditional formatting is applied.
Possible solution (optional, but very helpful):
In /lib/xlsx/xform/sheet/cf/cf-rule-xform.js
, this code could be patched to not assume formulae is set:
renderExpression(xmlStream, model) {
xmlStream.openNode(this.tag, {
type: 'expression',
dxfId: model.dxfId,
priority: model.priority,
});
this.formulaXform.render(xmlStream, model.formulae[0]);
xmlStream.closeNode();
}
Metadata
Metadata
Assignees
Labels
No labels