UNPKG

exceljs-xlsx-template

Version:

Generate .xlsx file from .xlsx template. Support for Browser and Node.js

80 lines (77 loc) 2.35 kB
const path = require("path"); const { renderXlsxTemplate, placeholderRange } = require("../src/index.js"); const xlsxFile = path.join(__dirname, "assets", "template.xlsx"); const officialsealFile = path.join(__dirname, "assets", "officialseal.png"); const imageUrl = "https://s2.loli.net/2025/03/07/ELZY594enrJwF7G.png"; const data = [ { name: "John", items: [ { no: "No.1", name: "JavaScript" }, { no: "No.2", name: "CSS" }, { no: "No.3", name: "HTML" }, { no: "No.4", name: "Node.js" }, { no: "No.5", name: "Three.js" }, { no: "No.6", name: "Vue" }, { no: "No.7", name: "React" }, { no: "No.8", name: "Angular" }, { no: "No.9", name: "UniApp" }, ], projects: [ { name: "Project 1", description: "Description 1", image: imageUrl }, { name: "Project 2", description: "Description 2", image: imageUrl }, { name: "Project 3", description: "Description 3", image: imageUrl }, ], }, { invoice_number: "54548", last_name: "John", first_name: "Doe", phone: "00874****", invoice_date: "15/05/2008", items: [ { name: "description", unit_price: 300, }, { name: "HTML", unit_price: 400, }, ], subtotal: 700, tax: 140, grand_total: 840, }, ]; const output = path.join(__dirname, "output", `${Date.now()}.xlsx`); // 渲染Xlsx模板 renderXlsxTemplate(xlsxFile, data, output, { parseImage: true, beforeSave(workbook) { // 获取工作表 const worksheet = workbook.getWorksheet("新报关单"); if (worksheet) { // 获取印章占位符位置信息 const range = placeholderRange(worksheet, "{{#officialseal}}"); if (range) { // 将图片添加到工作簿 const imageId = workbook.addImage({ filename: officialsealFile, extension: "png", }); // 插入图片到表格中 worksheet.addImage(imageId, { tl: { col: range.start.col, row: range.start.row - 4 }, ext: { width: 200, height: 200 }, }); } } }, }) .then(() => { console.log("🚀 ~ output:", output); }) .catch((error) => { console.error("Error processing Excel file:", error); });