node生成excel,動態替換表格內容
阿新 • • 發佈:2019-01-26
垂直居中 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,動態替換表格內容