1. 程式人生 > >node生成excel,動態替換表格內容

node生成excel,動態替換表格內容

垂直居中 xls add unit star for 內容 on() works

這裏使用的是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,動態替換表格內容