js-xlsx合并复杂表头导出

先上效果图:

js-xlsx的功能与介绍直接上npmjs找吧,下面直接上代码:

const XLSX = require('js-xlsx');
//表头
let headers = {
  A1: { v: '项目' },
  B1: { v: '查询总数(人次)' },
  C1: { v: '咨询方式(人次)' },
  P1: { v: '咨询类型(件)' },
  Z1: { v: '处理方式(件)' },
  C2: { v: '来访合计' },
  D2: { v: '分类' },
  L2: { v: 'cola' },
  M2: { v: 'colb' },
  O2: { v: 'colc' },
  D3: { v: 'cold' },
  E3: { v: 'cole' },
  F3: { v: 'colf' },
  G3: { v: 'colg' },
  H3: { v: 'colh' },
  I3: { v: 'coli' },
  J3: { v: 'colj' },
  K3: { v: 'colk' },
  M3: { v: '合计' },
  N3: { v: 'coll' },
  P2: { v: '合计' },
  Q2: { v: '刑事' },
  R2: { v: 'colm' },
  S2: { v: 'coln' },
  T2: { v: 'colo' },
  U2: { v: 'colp' },
  V2: { v: 'colq' },
  W2: { v: 'colr' },
  X2: { v: 'cols' },
  Y2: { v: 'colt' },
  Z2: { v: 'coul' },
  AA2: { v: 'colu' },
  AA3: { v: '合计' },
  AB3: { v: '受理并批准' },
  AC2: { v: 'colw' },
  A4: { v: '' },
  B4: { v: 1 },
  C4: { v: 2 },
  D4: { v: 3 },
  E4: { v: 4 },
  F4: { v: 5 },
  G4: { v: 6 },
  H4: { v: 7 },
  I4: { v: 8 },
  J4: { v: 9 },
  K4: { v: 10 },
  L4: { v: 11 },
  M4: { v: 12 },
  N4: { v: 13 },
  O4: { v: 14 },
  P4: { v: 15 },
  Q4: { v: 16 },
  R4: { v: 17 },
  S4: { v: 18 },
  T4: { v: 19 },
  U4: { v: 20 },
  V4: { v: 21 },
  W4: { v: 22 },
  X4: { v: 23 },
  Y4: { v: 24 },
  Z4: { v: 25 },
  AA4: { v: 26 },
  AB4: { v: 27 },
  AC4: { v: 28 }
};
//表格数据
let data = {
  A5: { v: '' },
  B5: { v: 1 },
  C5: { v: 2 },
  D5: { v: 3 },
  E5: { v: 4 },
  F5: { v: 5 },
  G5: { v: 6 },
  H5: { v: 7 },
  I5: { v: 8 },
  J5: { v: 9 },
  K5: { v: 10 },
  L5: { v: 11 },
  M5: { v: 12 },
  N5: { v: 13 },
  O5: { v: 14 },
  P5: { v: 15 },
  Q5: { v: 16 },
  R5: { v: 17 },
  S5: { v: 18 },
  T5: { v: 19 },
  U5: { v: 20 },
  V5: { v: 21 },
  W5: { v: 22 },
  X5: { v: 23 },
  Y5: { v: 24 },
  Z5: { v: 25 },
  AA5: { v: 26 },
  AB5: { v: 27 },
  AC5: { v: 28 }
};
// 合并 headers 和 data
var output = Object.assign({}, headers, data);
// 表格范围,范围越大生成越慢 
let ref = 'A1:ZZ100';
//合并单元格设置
var merges = [
  { s: { c: 0, r: 0 }, e: { c: 0, r: 2 } }, //项目
  { s: { c: 1, r: 0 }, e: { c: 1, r: 2 } }, //查询总数(人次)
  { s: { c: 2, r: 0 }, e: { c: 14, r: 0 } }, //咨询方式(人次)
  { s: { c: 15, r: 0 }, e: { c: 24, r: 0 } }, //咨询类型(件)
  { s: { c: 25, r: 0 }, e: { c: 28, r: 0 } }, //处理方式(件)
  { s: { c: 2, r: 1 }, e: { c: 2, r: 2 } },
  { s: { c: 3, r: 1 }, e: { c: 10, r: 1 } },
  { s: { c: 3, r: 2 }, e: { c: 3, r: 2 } },
  { s: { c: 4, r: 2 }, e: { c: 4, r: 2 } },
  { s: { c: 5, r: 2 }, e: { c: 5, r: 2 } },
  { s: { c: 6, r: 2 }, e: { c: 6, r: 2 } },
  { s: { c: 7, r: 2 }, e: { c: 7, r: 2 } },
  { s: { c: 8, r: 2 }, e: { c: 8, r: 2 } },
  { s: { c: 9, r: 2 }, e: { c: 9, r: 2 } },
  { s: { c: 10, r: 2 }, e: { c: 10, r: 2 } },
  { s: { c: 11, r: 1 }, e: { c: 11, r: 2 } },
  { s: { c: 12, r: 1 }, e: { c: 13, r: 1 } },
  { s: { c: 15, r: 1 }, e: { c: 15, r: 2 } },
  { s: { c: 16, r: 1 }, e: { c: 16, r: 2 } },
  { s: { c: 17, r: 1 }, e: { c: 17, r: 2 } },
  { s: { c: 18, r: 1 }, e: { c: 18, r: 2 } },
  { s: { c: 19, r: 1 }, e: { c: 19, r: 2 } },
  { s: { c: 20, r: 1 }, e: { c: 20, r: 2 } },
  { s: { c: 21, r: 1 }, e: { c: 21, r: 2 } },
  { s: { c: 22, r: 1 }, e: { c: 22, r: 2 } },
  { s: { c: 23, r: 1 }, e: { c: 23, r: 2 } },
  { s: { c: 24, r: 1 }, e: { c: 24, r: 2 } },

  { s: { c: 25, r: 1 }, e: { c: 25, r: 2 } },
  { s: { c: 26, r: 1 }, e: { c: 27, r: 1 } },
  { s: { c: 28, r: 1 }, e: { c: 28, r: 2 } }
];
// 构建 workbook 对象
var wb = {
  SheetNames: ['mySheet'],
  Sheets: {
    mySheet: Object.assign({}, output, { '!ref': ref, '!merges': merges })
  }
};

// 导出 Excel
XLSX.writeFile(wb, 'output_test1.xlsx');

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值