使用xlsx-js-style表格导出,合计,单元格居中,多级表头合并,添加序号

 

引入插件
import XLSXS from 'xlsx-js-style';
import FileSaver from 'file-saver';

插件版本
"xlsx-js-style": "^1.2.0"
"file-saver": "^2.0.5",
const exportExcel = () => {
  // 第一列添加序号
  state.tableData  = state.tableData.map((row, index) => {
    return Object.assign({}, { index: index + 1 }, row);
  });

  //转换为一个二维数组
  let body = state.tableData.map(x => ([x.index,x.dwmc, x.gfje, x.zjgf, x.zggf]))

  let tableLength = state.tableData.length + 2

  /* 定义表头
      定义表头,每一行即是一个数组,数组中的元素即是一个个单元格内容。
  */
  const header = [
    [
    {
      v: '表头标题',
      t: 's',
    },
  ],
  ['序号','单位','金额','其中处级','职工']
  ]

  //表尾第三列合计
  const tail = ['', '合计', { f: `SUM(C3:C${tableLength})`}]

  // 将定义好的表头表尾添加到 body 中
  body.unshift(...header);
  body.push(tail)

// aoa_to_sheet 将二维数组转成 sheet
const sheet = XLSXS.utils.aoa_to_sheet(body);

// 设置合并单元格 s是起始位,e结束位
const merges = [{ s: { r: 0, c: 0 }, e: { r: 0, c: 4 } },]
sheet['!merges'] = merges; // 将merges添加到sheet中
  
// 设置列宽行高
const cols = [ { wch: 10 },{ wch: 25 },{ wch: 20 },{ wch: 20 },{ wch: 20 } ];
sheet['!cols'] = cols; // 将cols添加到sheet中
const rows = [ { hpx: 35 },{ hpx: 25 },{ hpx: 20 }]
sheet['!rows'] = rows; // 将rows添加到sheet中,设置行高

// 设置单元格样式
//这里遍历单元格给单元格对象设置属性,s为控制样式的属性
Object.keys(sheet).forEach((key) => {
    if (key.indexOf('!') < 0) {
      sheet[key].s = {
        alignment: {//对齐方式
          horizontal: 'center',//水平居中
          vertical: 'center',//竖直居中
          // wrapText: true,//自动换行
        },
      }
      if (key.indexOf('1') !== -1) {
        sheet[key].s.font = {
          bold: true,
          sz: 16,
        } 
      }
      if (key.indexOf('2') !== -1) {
        sheet[key].s.font = {
          sz: 14,
        } 
      }
    } 
})

//导出
const workbook = XLSXS.utils.book_new();// 创建虚拟的 workbook
XLSXS.utils.book_append_sheet(workbook, sheet, 'sheet1'); // 向 workbook 中添加 sheet
const wbout = XLSXS.write(workbook, {bookType: 'xlsx', type: 'binary'});
  const blob = new Blob([s2ab(wbout)], {type: 'application/octet-stream'});
  FileSaver.saveAs(blob, 'sheet1.xlsx')
  //注意:定义导出 excel 的名称时需要加上后缀 .xlsx

  function s2ab (s) {
    const buf = new ArrayBuffer(s.length);
    const view = new Uint8Array(buf);
    for (let i = 8; i !== s.length; ++i){
      view[i] = s.charCodeAt(i) & 0xFF
    }
    return buf;
  }
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
xlsx-js-style是一个用于在前端开发中自定义Excel样式的库。它提供了多种功能,包括多级表头合计行、单元格宽度设置、合并单元格和隐藏表头等。 要使用xlsx-js-style实现多级表头,你需要按照以下步骤进行操作: 1. 首先,确保你已经安装了FileSaver和XLSX这两个库。你可以使用npm命令进行安装: ```shell npm install -S file-saver xlsx ``` 2. 在你的前端项目中引入xlsx-js-style库: ```javascript import XLSX from 'xlsx'; import XLSXStyle from 'xlsx-style'; ``` 3. 创建一个包含多级表头的数据对象。你可以使用XLSX.utils.json_to_sheet方法将数据转换为Excel表格: ```javascript const data = [ { name: 'John', age: 25, city: 'New York' }, { name: 'Jane', age: 30, city: 'Los Angeles' }, { name: 'Bob', age: 35, city: 'Chicago' } ]; const worksheet = XLSX.utils.json_to_sheet(data); ``` 4. 使用XLSXStyle.utils.sheet_add_json方法将数据添加到工作表中: ```javascript XLSXStyle.utils.sheet_add_json(worksheet, data, { header: ['name', 'age', 'city'] }); ``` 5. 设置多级表头样式。你可以使用XLSXStyle.utils.sheet_set_range_style方法来设置表头样式: ```javascript const range = { s: { r: 0, c: 0 }, e: { r: 0, c: 2 } }; // 设置表头范围 const style = { font: { bold: true }, fill: { fgColor: { rgb: 'FFFF0000' } } }; // 设置表头样式 XLSXStyle.utils.sheet_set_range_style(worksheet, range, style); ``` 6. 保存Excel文件。你可以使用FileSaver库将工作表保存为Excel文件: ```javascript const workbook = XLSXStyle.utils.book_new(); XLSXStyle.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); XLSXStyle.writeFile(workbook, 'output.xlsx'); ``` 通过以上步骤,你可以使用xlsx-js-style库在前端开发中实现多级表头的功能。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值