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)
原文地址:https://www.cnblogs.com/liangyy/p/10322640.html