这里使用的是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:
},
{
identifier: '哈哈2',
name1: '桥2',
unit: '试试2',
price:
}
]
//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 =
// 循环数据数组 将内容写入excel中
for (let a of info) {
row = row+
ws1.addRow([a.identifier, a.name1, a.unit, a.price])
}
ws1.addRows(info) rowCenter(ws1, , row)
colWidth(ws1, [,,,,], ) //设置 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[].rows[].cells[].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()