创建excel文件并使用ExcelJS写入

Posted

技术标签:

【中文标题】创建excel文件并使用ExcelJS写入【英文标题】:Creating excel file and writing to it with ExcelJS 【发布时间】:2019-08-03 14:11:24 【问题描述】:

我写了一个脚本,用 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 copy of export.xlsx
const newWorkbook = new Excel.Workbook();
await newWorkbook.xlsx.readFile('export.xlsx');

const newworksheet = newWorkbook.getWorksheet('My Sheet');
newworksheet.addRow(
  id: 3, name: 'New Guy', dob: new Date(2000, 1, 1)
);

await newWorkbook.xlsx.writeFile('export2.xlsx');

console.log("File is written");
;

exTest();

【问题讨论】:

你能在控制台中得到这个“文件已写入”吗? @AlekhyaSatya:是的。也没有错误,并且创建了两个文件。问题是第二个文件与第一个文件相同,它不会在新行中添加额外的第三行数据。这段代码可以轻松运行,你只需要npm install exceljs 这两个文件都打开了吗?如果是,请关闭它们并重新运行代码? @AlekhyaSatya 在代码运行之前文件还不存在。 @AlekhyaSatya 解决了它并发布了答案。 【参考方案1】:

附上工作链接

const Excel = require('exceljs');

// Create workbook & add worksheet
const workbook = new Excel.Workbook();
const worksheet = workbook.addWorksheet('ExampleSheet');

// add column headers
worksheet.columns = [
   header: 'Package', key: 'package_name' ,
   header: 'Author', key: 'author_name' 
];

// Add row using key mapping to columns
worksheet.addRow(
   package_name: "ABC", author_name: "Author 1" ,
   package_name: "XYZ", author_name: "Author 2" 
);

// Add rows as Array values
worksheet
  .addRow(["BCD", "Author Name 3"]);

// Add rows using both the above of rows
const rows = [
  ["FGH", "Author Name 4"],
   package_name: "PQR", author_name: "Author 5" 
];


worksheet
  .addRows(rows);

// save workbook to disk
workbook
  .xlsx
  .writeFile('sample.xlsx')
  .then(() => 
    console.log("saved");
  )
  .catch((err) => 
    console.log("err", err);
  );

https://repl.it/@vishwasc/ExcelJs-Example#index.js

图片附件

// add image to workbook by filename
const imageId1 = workbook.addImage(
  filename: 'path/to/image.jpg',
  extension: 'jpeg',
);

// add image to workbook by buffer
const imageId2 = workbook.addImage(
  buffer: fs.readFileSync('path/to.image.png'),
  extension: 'png',
);

// add image to workbook by base64
const myBase64Image = "data:image/png;base64,iVBORw0KG...";
const imageId2 = workbook.addImage(
  base64: myBase64Image,
  extension: 'png',
);

请注意,在这两种情况下,都必须指定扩展名。有效的扩展值包括“jpeg”、“png”、“gif”。

【讨论】:

不错的解决方案!!【参考方案2】:

通过在代码的第二部分添加数组来描述列来解决它。然后第三行添加成功。将具有列名的对象传递给addRow() 时,我必须提供对 excel 文件中已存在的列的描述。

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 copy of export.xlsx
const newWorkbook = new Excel.Workbook();
await newWorkbook.xlsx.readFile('export.xlsx');

const newworksheet = newWorkbook.getWorksheet('My Sheet');
newworksheet.columns = [
 header: 'Id', key: 'id', width: 10,
 header: 'Name', key: 'name', width: 32, 
 header: 'D.O.B.', key: 'dob', width: 15,
];
await newworksheet.addRow(id: 3, name: 'New Guy', dob: new Date(2000, 1, 1));

await newWorkbook.xlsx.writeFile('export2.xlsx');

console.log("File is written");

;

exTest();

【讨论】:

以上是关于创建excel文件并使用ExcelJS写入的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从闪亮的应用程序写入exce / csv文件?恰好我想将股票价格值的值写入excel / csv文件

eggjs中使用exceljs直接导出excel文件

python连接mysql之查询及写入excel

使用exceljs时报错:no such file or directory

使用 excelJs 插件导出 excel(原生js)?

node生成excel,动态替换表格内容