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

博客涉及Excel相关操作,包含设置样式、居中以及导出下载等内容,还提到导入可参考某篇文章。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导入可参考这篇文章

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;

xlsx-style-vite 是一个基于 Node.js 的库,用于在服务器端生成和修改 Excel 文件。要修改导出 Excel 表格的字体,需要先安装 xlsx-style-vite 和相关的字体库,然后使用相关的 API 进行操作。 以下是一个简单的示例,演示如何在 Excel 表格中修改字体: ```javascript const XLSXStyle = require('xlsx-style-vite'); const workbook = XLSXStyle.readFile('example.xlsx'); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; // 修改字体 const cellRange = XLSXStyle.utils.decode_range(worksheet['!ref']); for (let r = cellRange.s.r; r <= cellRange.e.r; r++) { for (let c = cellRange.s.c; c <= cellRange.e.c; c++) { const cellAddress = XLSXStyle.utils.encode_cell({ r, c }); if (worksheet[cellAddress]) { worksheet[cellAddress].s = { font: { name: 'Calibri', sz: 14, bold: true, color: { rgb: 'FF0000FF' }, }, }; } } } XLSXStyle.writeFile(workbook, 'output.xlsx'); ``` 在上面的示例中,我们使用 XLSXStyle 库中的 `readFile()` 方法读取了一个名为 `example.xlsx` 的 Excel 文件。然后,我们获取了第一个工作表并遍历了其中的所有单元格,并使用 `worksheet[cellAddress].s` 对象修改了单元格样式,包括字体名称、大小、粗细和颜色等。最后,我们使用 `writeFile()` 方法将修改后的 Excel 文件保存为 `output.xlsx` 文件。 需要注意的是,在修改字体之前,您需要确保已经安装了所需的字体库,并且在代码中正确地引用了这些字体。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值