exceljs / exceljs

Excel Workbook Manager

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Can't add cell comment using streaming WorkbookWriter

quex46 opened this issue · comments

By using streaming WorkbookWriter I'm getting error if I try to add cell comment.

exceljs v1.12.2
nodejs v10.11.0

Here is the minimal snippet to implement the issue:

const Excel = require('exceljs/modern.nodejs');

const workbook = new Excel.stream.xlsx.WorkbookWriter({ filename: '/tmp/exported.xlsx' });
const sheet = workbook.addWorksheet('Sheet 1');

sheet.addRow(['First column value']);
sheet.getCell('A1').note = 'Hello World!'; // This fails

workbook
  .commit()
  .then(() => { console.log('Done!'); });

result:

/home/user/Documents/project/node_modules/exceljs/lib/xlsx/xform/sheet/cell-xform.js:64
      options.comments.push({ ...model.comment, ref: model.address });
                       ^

TypeError: Cannot read property 'push' of undefined
    at module.exports.prepare (/home/user/Documents/project/node_modules/exceljs/lib/xlsx/xform/sheet/cell-xform.js:64:24)
    at model.cells.forEach.cellModel (/home/user/Documents/project/node_modules/exceljs/lib/xlsx/xform/sheet/row-xform.js:26:17)
    at Array.forEach (<anonymous>)
    at RowXform.prepare (/home/user/Documents/project/node_modules/exceljs/lib/xlsx/xform/sheet/row-xform.js:25:17)
    at module.exports._writeRow (/home/user/Documents/project/node_modules/exceljs/lib/stream/xlsx/worksheet-writer.js:495:17)
    at module.exports._commitRow (/home/user/Documents/project/node_modules/exceljs/lib/stream/xlsx/worksheet-writer.js:332:14)
    at Row.commit (/home/user/Documents/project/node_modules/exceljs/lib/doc/row.js:30:21)
    at Object.<anonymous> (/home/user/Documents/project/services/data_export/issue.js:36:46)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:279:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:752:3)

Switching from streaming to another method resolves the issue.

const Excel = require('exceljs/modern.nodejs');

const workbook = new Excel.Workbook();
const sheet = workbook.addWorksheet('Sheet 1');

sheet.addRow(['First column value']);
sheet.getCell('A1').note = 'Hello World!'; // It works!

workbook.xlsx
  .writeFile('/tmp/exported.xlsx')
  .then(() => { console.log('Done!'); });

Opened a PR for that: #911

Published in v3.1.0 ( thanks @brunoargolo )