第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 在node中使用xlsx-style完成excel的导出 以及设置样式

在node中使用xlsx-style完成excel的导出 以及设置样式

时间:2024-01-22 21:48:41

相关推荐

在node中使用xlsx-style完成excel的导出 以及设置样式

导入可参考这篇文章

var express = require('express');var router = express.Router();//const xlsx = require('xlsx');//原生的xlsx,但不支持表格的样式设置const _ = require('lodash');//引入lodash辅助工具const fs = require('fs');//引入fs模块用于读取文件流const moment = require('moment');//用于时间格式的设置const xlsx = require('xlsx-style');//选择使用xlsx-style可以设置表格样式/* GET users listing. */router.get('/:id', function (req, res, next) {console.log('接受到的result风格参数 = ', req.params.id);//excel的导出//先定义需要导出的字段let _headers = ['id', 'name', 'age', 'country', 'remark']let _data = [{id: '1',name: '无敌浩克',age: '17',country: 'China',remark: 'hello'},{id: '2',name: '钢铁侠',age: '18',country: 'America',remark: 'world'},{id: '3',name: '灭霸',age: '19',country: 'CSH',remark: 'CSDN'},{id: '4',name: '美国队长',age: '20',country: 'CSH',remark: 'CSDN'}];let headersExport = _headers.map((v, i) => _.assign({}, { v: v, position: String.fromCharCode(65 + i) + 1 })).reduce((prev, next) => _.assign({}, prev, {[next.position]: {v: next.v, s: {alignment: {horizontal: "center",vertical: "center"}}}}), {});let dataExport = _data.map((v, i) => _headers.map((k, j) => _.assign({}, { v: v[k], position: String.fromCharCode(65 + j) + (i + 2) }))).reduce((prev, next) => prev.concat(next)).reduce((prev, next) => _.assign({}, prev, {[next.position]: {v: next.v, s: {alignment: {horizontal: "center",vertical: "center"}}}}), {});// 合并 headersExport 和 dataExportconst output = _.assign({}, headersExport, dataExport);console.log(output.A1);// 获取所有单元格的位置const outputPos = _.keys(output);// 计算出范围const ref = outputPos[0] + ':' + outputPos[outputPos.length - 1];// 构建 workbook 对象const wb = {SheetNames: ['Sheet'],Sheets: {'Sheet': _.assign({}, output, { '!ref': ref })}};const strs = 'output.xlsx';// 导出 Excelconst buffer = xlsx.writeFile(wb, strs, {type: "buffer"});res.set('Content-Type', 'application/vnd.openxmlformats');res.set('Content-Disposition', 'attachment; filename="OKR-' + '(' + moment(Date.now()).format('YYYY-MM-DD HH:mm:ss') + ')' + '.xlsx"');res.end(buffer, 'binary');});module.exports = router;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。