node生成excel,动态替换表格内容
Posted liangyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node生成excel,动态替换表格内容相关的知识,希望对你有一定的参考价值。
这里使用的是exceljs模块, 好上手,易操作
1. 大致使用步骤
npm install exceljs
// 引用
var Excel = require(‘exceljs‘);
// 创建一个workbook对象:
var workbook = new Excel.Workbook();
2. 创建一个新的excel,自己设计样式
例子:
function create () { let info = [ { identifier: ‘哈哈哈1‘, name1: ‘桥1‘, unit: ‘试试1‘, price: 13 }, { identifier: ‘哈哈2‘, name1: ‘桥2‘, unit: ‘试试2‘, price: 132 } ] //create a workbook var workbook = new Excel.Workbook(); // add header 创建sheet var ws1 = workbook.addWorksheet("测试一"); // 添加一行 ws1.addRow([‘工程量汇总‘]) // 合并单元格 ws1.mergeCells("A1: D1") ws1.addRow(["识别","名字", ‘单位‘, ‘价钱‘]); let row = 2 // 循环数据数组 将内容写入excel中 for (let a of info) { row = row+1 ws1.addRow([a.identifier, a.name1, a.unit, a.price]) } ws1.addRows(info) rowCenter(ws1, 1, row) colWidth(ws1, [1,2,3,4,5], 20) //设置 start-end 行单元格水平垂直居中/添加边框 function rowCenter(arg_ws, arg_start, arg_end) { for(i = arg_start; i <= arg_end; i++) { arg_ws.findRow(i).alignment = { vertical: ‘middle‘, horizontal: ‘center‘ }; //循环 row 中的 cell,给每个 cell添加边框 arg_ws.findRow(i).eachCell(function (cell, index) { cell.border = { top: {style:‘thin‘}, left: {style:‘thin‘}, bottom: {style:‘thin‘}, right: {style:‘thin‘} }; }) } } //设置 start-end 列的宽度 function colWidth(arg_ws, arg_cols, arg_width) { for(i in arg_cols) { arg_ws.getColumn(arg_cols[i]).width = arg_width; } } workbook.xlsx.writeFile(‘./text.xlsx‘).then(() => { console.log(‘生成excel完成‘) })
}
3. 设计好excel模板, 替换excel中的内容
例一:
function replaceExcel () { var workbook = new Excel.Workbook()
workbook.xlsx.readFile(‘./up/test.xlsx‘).then(function(){
// 定位需要修改的位置
workbook.model.sheets[0].rows[0].cells[0].value = ‘ss‘ workbook.xlsx.writeFile(‘./a.xlsx‘).then(()=> { console.log(‘重写完成‘) }) }) }
例二:
function replaceExcel2 () { var workbook = new Excel.Workbook() workbook.xlsx.readFile(‘./up/test.xlsx‘).then(function(){ // let sheet = workbook.getWorksheet(1)
// 遍历每一个sheet workbook.eachSheet(function(sheet, sheetId) { // 遍历每一列 sheet.eachRow((row, rowNumber) => { // 取出每个单元格 row.eachCell((cell, colNumber) => { // 进行判断单元格内容 if (cell.value == ‘地面‘) {
// 替换内容 cell.value = ‘测试‘ } else if (cell.value == ‘动物‘) { cell.value = ‘测试ssss‘ } }) }) }) workbook.xlsx.writeFile(‘./b.xlsx‘).then(() => { console.log(‘重写‘) }) }) }
4. 以上都是保存文件在本地,可以使用流的形式直接返回给前端
const express = require(‘express‘) const app = express() const Excel = require(‘exceljs‘) app.get(‘/demo‘, (req, res) => { //create a workbook var workbook = new Excel.Workbook(); //add header var ws1 = workbook.addWorksheet("测试一"); ws1.addRow([‘工程量汇总‘]) ws1.mergeCells("A1: D1") ws1.addRow(["识别","名字", ‘单位‘, ‘价钱‘]); workbook.xlsx.write(res) }) app.listen(3000)
以上是关于node生成excel,动态替换表格内容的主要内容,如果未能解决你的问题,请参考以下文章
Delphi中如何对StringGrid表格中内容进行修改?
前端实现生成带有样式的excel表格 Node和浏览器读写Excel文件探究实践
前端实现生成带有样式的excel表格 Node和浏览器读写Excel文件探究实践