创建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文件