我目前正在开发一种表单,它将接受用户输入并将其添加到 Excel 工作表的一行中,到目前为止,我已经设法使用第 3 方插件(具体来说是 Node-xls)制作 Excel 工作表。 如果我想向 Excel 添加另一行,则会出现问题,它会删除旧条目并添加新条目,而不是将数据附加到下一行。
尝试读取 Excel,然后连接缓冲区并再次写入文件,但结果发现它损坏了文件并使其无法使用。
如何将数据附加到 Excel 工作表的末尾?我是 Nodejs 和缓冲区的新手
var fs = require('fs');
var NodeXls = require('node-xls');
var tool = new NodeXls();
var xls = tool.json2xls({firstName: "arjun", lastName: "u", dob:"12/3/2008"}, {order:["firstName", "lastName", "dob"]});
fs.appendFile('output.xlsx', xls, 'binary', function(err){
if(err)
alert("File is readOnly or is being used by another application, please close it and continue!");
});
你尝试过Exceljs吗?它有助于读取、操作电子表格数据和样式并将其写入 XLSX 和 JSON。
查看以下链接了解详情
https://www.npmjs.com/package/exceljs
您添加行或追加行的问题已在这里解决:
worksheet.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});
var rowValues = [];
rowValues[1] = 4;
rowValues[5] = 'Kyle';
rowValues[9] = new Date();
worksheet.addRow(rowValues);
// Add an array of rows
var rows = [
[5,'Bob',new Date()], // row by array
{id:6, name: 'Barbara', dob: new Date()}
];
worksheet.addRows(rows);
安装npm模块'spread_sheet',它肯定会解决添加行以及从任何工作表中读取电子表格行的问题。
它将一次添加一行
var spread_sheet = require('spread_sheet');
var row = "1,2,Jack,Pirate";
var filePath = '/home/Pranjal/Desktop/test.xlsx';
var sheetName = "Sheet1";
spread_sheet.addRow(row,filePath,sheetName,function(err,result){
console.log(err,result)
})
使用以下代码进行相同的操作 -
const fs = require('fs');
const xlsx = require('xlsx');
function appendFromExcelToExcel(filePath, data) {
try {
const workbook = xlsx.readFile(filePath);
const sheetName = 'Sheet1';
const worksheet = workbook.Sheets[sheetName] || xlsx.utils.aoa_to_sheet([]);
const lastRow = worksheet['!ref'].match(/R(\d+)/)[1];
const newRow = xlsx.utils.aoa_to_sheet([data]);
xlsx.utils.sheet_add_json(worksheet, newRow, { origin: `A${lastRow}` });
xlsx.writeFile(workbook, filePath);
console.log('appended success!');
} catch (error) {
console.error('Error appending :', error);
}
}
const filePath = 'myData.xlsx';
const newData = ['New Data 1', 'New Data 2'];
appendFromExcelToExcel(filePath, newData);