совершить ошибку в exceljs

Я попытался создать excel, но получил ошибку фиксации. Что не так в моем коде. Если я удалю sheet.commit() и workbook.commit() программа работает нормально.

const Excel = require('exceljs');
const fs = require('fs');

const workbook = new Excel.Workbook();
const sheet = workbook.addWorksheet("MySheet");
const writeToExcel = fs.createWriteStream("./test/testfile.xlsx");

sheet.columns = [
    { header: 'Id', key: 'id', width: 10 },
    { header: 'Name', key: 'name', width: 40 },
    { header: 'DOB', key: 'dob', width: 10, outlineLevel: 1}
];


let names = ['Windows', 'Mac Os', 'Ubuntu', 'B OS'];
let i = 2;

names.forEach( (singleName) => {
    let row = sheet.getRow(i);
    row.values = {
        id: i-1,
        name: singleName,
        dob: new Date()
    };
    row.commit();
    i++;
});

sheet.commit();
workbook.commit();

workbook.xlsx.write(writeToExcel)
 .then( (response) => {
    console.log("Excel file is created with data.");
 })
 .catch( (error) => {
    console.log("Some problem in creating an excel file. Please check for errors...");
 });

ниже ошибка.

λ node excel.js
c:\Personal\node_projects\node-js-playlist-master\excel.js:29
sheet.commit();
      ^

TypeError: sheet.commit is not a function
    at Object.<anonymous> (c:\Personal\node_projects\node-js-playlist-master\excel.js:29:7)
    at Module._compile (module.js:624:30)

если я удаляю фиксацию листа, возникает ошибка в строке фиксации рабочей книги. Здесь пригодится любая помощь..


person mmar    schedule 07.10.2017    source источник
comment
любая помощь ценна.   -  person mmar    schedule 10.10.2017
comment
любая помощь в этом, пожалуйста....   -  person mmar    schedule 30.11.2017


Ответы (2)


не знаю, нашли ли вы свой ответ.

Единственными объектами, имеющими функцию фиксации, являются строки и потоки XLSX.

Вы уже фиксируете каждую строку с помощью

  row.commit();

Листы сами по себе не имеют функции фиксации, в отличие от строк. То, что вы, вероятно, нашли в примерах, было чем-то вроде:

  sheet.addRow([...]).commit();

Однако это происходит не на листе, а в строке.

Что касается фиксации рабочей книги. Вы, наверное, видели этот пример коммита, но опять же, это коммит на поток XLSX, а не сама книга.

person vjancic    schedule 19.01.2018
comment
Но документация предполагает обратное As each worksheet is completed, it must also be committed: // Finished adding data. Commit the worksheet worksheet.commit(); - person PravyNandas; 24.02.2021

Вам не нужен вызов commit().

Просто удалите строки ниже. и это работает

sheet.commit();
workbook.commit();
row.commit();

Функция commit() нужна только для потоковой записи.

person sankesh    schedule 20.05.2019