user7104874
user7104874

Reputation: 1381

writeFile not woking in exceljs

i am using exceljs and try to write value in a cell but it does not working. However workbook.xlsx.readFile(filename) is working but workbook.xlsx.writeFile(filename) won't.

Here is my code:-

var Excel = require('exceljs');
var fs = require('fs')
module.exports.summary = function(req, res, next) {
try {
    var filename = process.cwd() + '/template/report/summary.xlsx';
    var workbook = new Excel.Workbook();
    workbook.xlsx.writeFile(filename)
        .then(function() {
            var worksheet = workbook.getWorksheet(1);
            console.log('worksheet',worksheet);
            var row = worksheet.getRow(5);
            row.getCell('C').value = new Date();
            row.commit();
            worksheet.commit();

            workbook.commit().then(function() {
                console.log('xls file is written.');
            });
            res.json({ msg: done })
        });

 } catch (e) {
    next(e);
 }
}

Upvotes: 5

Views: 20211

Answers (4)

Mehad Mushtaq
Mehad Mushtaq

Reputation: 11

How i fix this: Previously i was just iterating over myData which is a list of objects and add them into the workbook using .addRow() function like this:

 myData.forEach(row => {
            worksheet.addRow(rowData);  //object           
        });

which results empty rows in my exported xlxs, but after research found that .addRow() accepts list[] not object which was in my case to add into workbook so i just convert object data into an list using Objects.values(row) and it worked for me!

here is updated code:

 myData.forEach(row => {
            const rowData = Object.values(row);   
            worksheet.addRow(rowData);          //array   
        });

writeFile() is definitely a working function

Upvotes: 0

Yogi Arif Widodo
Yogi Arif Widodo

Reputation: 679

In my case i have name like "data2022/2023" the main problem is "/" when i remove the slash "data2020" its work. Dunno why cant use unicoden"/"

Upvotes: 0

Fernanda Pichardo
Fernanda Pichardo

Reputation: 11

writeFile is no longer supported, so I suggest you to exchange it for "writeBuffer". This code worked to me:

const buffer = workbook.xlsx.writeBuffer();
const fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
let EXCEL_EXTENSION = '.xlsx';
const blob= new Blob([buffer], {type: fileType});
saveAs(blob, 'filename' + EXCEL_EXTENSION);

Upvotes: 1

Kalaiselvan M
Kalaiselvan M

Reputation: 191

Try this code, Hope this will help you

const excel = require('exceljs');

//Creating New Workbook 
var workbook = new excel.Workbook();

//Creating Sheet for that particular WorkBook
var sheetName = 'Sheet1';
var sheet = workbook.addWorksheet(sheetName);

//Header must be in below format
sheet.columns = [{key:"name", header:"name"}, {key: "age", header: "age"}];

//Data must be look like below, key of data must be match to header.
var data = [{name:"Kalai", age: 24}, {name:"Vignesh", age:24}];

//adding each in sheet
for(i in data){
  sheet.addRow(data[i]);
}

//Finally creating XLSX file
var fileName = "Sample.xlsx";
workbook.xlsx.writeFile(fileName).then(() => {
    callback(null);
});

Upvotes: 12

Related Questions