有没有办法修改node.js中的现有excel文件?我查看了exceljs但它没有提供任何只修改现有数据的功能.好像它会写入新的流.
或者我错过了exceljs的一些东西?
提前致谢.
所以根据官方文档,我应该能够使用以下方法阅读excel文档:
// read from a file
var workbook = new Excel.Workbook();
workbook.xlsx.readFile(filename)
.then(function() {
// use workbook
});
// pipe from stream
var workbook = new Excel.Workbook();
stream.pipe(workbook.xlsx.createInputStream());
Run Code Online (Sandbox Code Playgroud)
我有以下文件:

我需要做的就是将每一行加载到一个对象中:
var excelObject = {competence1: '', competence2: ''}
Run Code Online (Sandbox Code Playgroud)
然后将其保存到数组中.
但是文档并没有给我更多关于我如何从这个文件中读取的内容.它使用一个被调用的变量stream但是这个变量没有在任何地方解释
有谁知道插件并知道我如何实现我的目标?
我写了一个脚本,用 ExcelJS 创建一个新的 excel 文件。添加 3 个标题并插入 2 行。然后将该文件保存到磁盘。
在下一步中,它应该读取先前保存的文件,添加 1 行并以新名称再次保存。我找不到我尝试添加第三行的第二部分从未发生的原因。两个文件看起来相同,控制台中没有错误。
const Excel = require('exceljs');
async function exTest(){
const workbook = new Excel.Workbook();
const worksheet = workbook.addWorksheet("My Sheet");
worksheet.columns = [
{header: 'Id', key: 'id', width: 10},
{header: 'Name', key: 'name', width: 32},
{header: 'D.O.B.', key: 'dob', width: 15,}
];
worksheet.addRow({id: 1, name: 'John Doe', dob: new Date(1970, 1, 1)});
worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965, 1, 7)});
// save under export.xlsx
await workbook.xlsx.writeFile('export.xlsx');
// load a …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用node.js中的excel.js模块创建xslx文件.我能够创建列并添加其值.但是,我需要在列标题之前插入一些行,在那里我可以有一些描述.我怎样才能做到这一点?
任何帮助将不胜感激
我试过的代码是
var worksheet = workbook.getWorksheet(1);
worksheet.mergeCells('A1:B1');
var row = worksheet.getRow(1);
row.getCell(1).value =' Hello, World!';
// ... merged cells are linked
worksheet.getCell('A1').value = 'PI';
worksheet.columns = [
{header: 'Id', key: 'id', width: 10},
{header: 'Name', key: 'name', width: 32},
{header: 'complexity', key: 'complexity', width: 10},
{header: 'hours', key: 'hours', width: 10},
{header: 'cost', key: 'cost', width: 10}
];
worksheet.addRow({name:'m', complexity: 'd', hours:5, cost: 7});
Run Code Online (Sandbox Code Playgroud) 我正在使用exceljs模块来创建excel文件.问题是它既没有被创建也没有被保存在路径中.
var excel = require('exceljs');
var options = {
filename: './streamed-workbook.xlsx',
useStyles: true,
useSharedStrings: true
};
var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
var sheet = workbook.addWorksheet('My Sheet');
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'DOB', width: 10 }
];
worksheet.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)});
worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)});
worksheet.commit();
workbook.commit().then(function(){
console.log('xls file is written.');
});
Run Code Online (Sandbox Code Playgroud)
但是当我运行代码时没有任何反应.没有创建excel.我在这里错过了什么?
***********************编辑**************************对我的代码进行了以下更改,但仍然无法正常工作.
var …Run Code Online (Sandbox Code Playgroud) 我循环Sheet 1一个Excel文件,其中包含3列,每行包含100行数据(字符串),并将一行中的每个单元格与行中的组合进行比较Sheet 2.
检查应该Sheet 1逐行开始,查看行中每个单元格的值是否与行中的任何位置匹配Sheet 2.如果检查失败,则应停止对该行的进一步检查,并开始检查下一行.Sheet 1无法匹配的单元格应标记为红色.
我下面的代码接近我需要的代码,但是如果Sheet 1(Eg Row 1: B2 and B3)中有2个或更多个单元格与任何行中的任何内容都不匹配,则会抛出错误Sheet 2.
错误:
(node:9040) UnhandledPromiseRejectionWarning: Error: Invalid Address: Aundefined
at Object.validateAddress (C:\node_modules\exceljs\dist\es5\utils\col-cache.js:86:13)
at new module.exports (C:\node_modules\exceljs\dist\es5\doc\cell.js:29:12)
at module.exports.getCellEx (C:\node_modules\exceljs\dist\es5\doc\row.js:55:14)
at module.exports.getCell (C:\node_modules\exceljs\dist\es5\doc\row.js:72:41)
at C:\so.js:56:61
at C:\node_modules\exceljs\dist\es5\doc\worksheet.js:370:11
at Array.forEach (<anonymous>)
at module.exports.eachRow (C:\node_modules\exceljs\dist\es5\doc\worksheet.js:368:18)
at C:\so.js:16:19
at <anonymous>
(node:9040) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function …Run Code Online (Sandbox Code Playgroud) 我尝试创建 Excel,但出现提交错误。我的代码有什么问题。如果我删除sheet.commit()并且workbook.commit()程序工作正常。
const Excel = require(\'exceljs\');\nconst fs = require(\'fs\');\n\nconst workbook = new Excel.Workbook();\nconst sheet = workbook.addWorksheet("MySheet");\nconst writeToExcel = fs.createWriteStream("./test/testfile.xlsx");\n\nsheet.columns = [\n { header: \'Id\', key: \'id\', width: 10 },\n { header: \'Name\', key: \'name\', width: 40 },\n { header: \'DOB\', key: \'dob\', width: 10, outlineLevel: 1}\n];\n\n\nlet names = [\'Windows\', \'Mac Os\', \'Ubuntu\', \'B OS\'];\nlet i = 2;\n\nnames.forEach( (singleName) => {\n let row = sheet.getRow(i);\n row.values = {\n id: i-1,\n name: singleName,\n dob: new Date()\n };\n …Run Code Online (Sandbox Code Playgroud) 现在,我必须像这样进行硬编码
var cell = worksheet.getCell('A1');
Run Code Online (Sandbox Code Playgroud)
但我想按名称定义我的单元格data,并通过以下方式访问单元格:
var cell = worksheet.getCell('data');
Run Code Online (Sandbox Code Playgroud)

我怎样才能用 exceljs 做到这一点? 非常感谢!
注意:解决我的问题的唯一解决方案似乎是添加列/行标题并定义键,但我不想在我的代码中这样做:
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 }
];
Run Code Online (Sandbox Code Playgroud) 请帮助我。
我的流程:
使用文件 Tempate -> Code (Exceljs) -> 输出新文件
模板文件:
源代码:
worksheet.pageSetup.horizontalCentered = true
worksheet.pageSetup.verticalCentered = true
Run Code Online (Sandbox Code Playgroud)
但是文件输出:
我正在尝试将图像添加到特定单元格,有什么方法可以调整图像大小或单元格大小,以便它适合单元格。?
result.map(order => {
const worksheet = workbook.addWorksheet(order.branch_code);
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Product Code', key: 'pcode', width: 20 },
{ header: 'Image', key: 'image', width: 50 },
];
order.products.map(product => {
const imageId = workbook.addImage({
filename: `${PRODUCT_IMAGE_PATH}/${product.image}`,
extension: 'jpeg',
});
worksheet.addRow({ id: product.products.id, pcode: product.products.product_code });
worksheet.addImage(imageId, `C${position}:C${position}`);
position++;
});
});
await workbook.xlsx.writeFile('export.xlsx');
Run Code Online (Sandbox Code Playgroud)
但看起来像这样,我该如何解决这个问题?
预期操作: