我是靠谱客的博主 高兴鱼,最近开发中收集的这篇文章主要介绍在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 和 dataExport
  const 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';
  // 导出 Excel
  const 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;

最后

以上就是高兴鱼为你收集整理的在node中使用xlsx-style完成excel的导出,以及设置样式的全部内容,希望文章能够帮你解决在node中使用xlsx-style完成excel的导出,以及设置样式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部