React xlsx(工具库) 处理表头合并

news/2024/7/15 17:57:29 标签: react.js, 前端, 前端框架

前端导出excel表格
引入xlsx插件,不然应该是运行不起来的(xlsx无 样式)
样式使用 xlsx-js-style 或 xlsx-style

npm i xlsx
xlsx中文文档

插件2 exceljs
npm i exceljs
exceljs中文文档

导出

例子

在这里插入图片描述

import { ExportExcel } from './exportExcel/index';

  const columns=[
  {
    title: 'id',
    dataIndex: 'item1',
  },
  {
    title: '序号',
    dataIndex: 'item2',
  },
  {
    title: '合并列1-2',
    dataIndex: 'a1',
    children: [
      {
        title: '合并列1',
        dataIndex: 'data1',
      },
      {
        title: '合并列2',
        dataIndex: 'data2',
      },
    ],
  }
  ]
  //下方 '' 值为要合并项,主体值('合并列1-2')放前面,或放上面('id')
  //将表头拆为两行
  //若要加一个表头(xxxx表格),则为三行 titleArr.splice(0, 0, ['xxxx表格','','']);
  const titleArr=[
  ['id','序号','合并列1-2',''],
  ['','','合并列1','合并列2']];
 
// 合并
// s 意为 start ,即开始的单元格
// r 是 row ,表示行号,从 0 计起
// c 是 col ,表示列号,从 0 计起 
// e 意为 end,结束
const merges=[
{s:{c:0,r:0},e:{c:0,r:1}}, //合并第一列 第1行至第2行
{s:{c:0,r:2},e:{c:0,r:3}},// 合并第一行  第3个至第4个
]
  
let dataSource=[
{item1:'0',item2:'1',data1:'2',data2:'3'},
{item1:'0',item2:'1',data1:'2',data2:'3'}]

<Button
  type="primary"
  ghost
  onClick={() =>
    ExportExcel(
      columns,
      dataSource,
      `sheet页名自定义`,
      `fileName 文件名称自定义`,
      'xls',
      titleArr,
      merges
    )
  }
>
  导出
</Button>

ExportExcel函数封装

import XLSX from 'xlsx';
/**
 * zy
 * @param {*} label 表头-必填-例[{ title: '单位',dataIndex: 'item6',},]
 * @param {*} data 数据-必填-例[['0001','2017001','天'],['0002','2017002','干']],
 * @param {*} sheetName sheet页名
 * @param {*} fileName 文件名称
 * @param {*} fileType 文件类型-暂只使用xlsx,xls
 * @param {*} titleArr 表头-必填-例 [['编码','编号','备注']],默认二维数组[[]]
 * @param {*} merges 合并-选填-{s:{c:0,r:0},e:{c:2,r:0}}, //合并第一行 第1个至第3个
 */

export const ExportExcel= (
  label,
  data,
  sheetName,
  fileName,
  fileType,
  titleArr = [[]],
  merges = []
) => {
  sheetName = sheetName || 'sheet1';
  fileName = fileName || '导出表';
  fileType = fileType || 'xls';
  //组织数据
  let dataArr = [];
  let dataIndexArr = [];
  label.forEach((item) => {
  //根据自身实际情况处理 children
    if (item?.children && item.children.length) {
      item.children.forEach((item2) => {
        dataIndexArr.push(item2.dataIndex);
      });
    } else {
      dataIndexArr.push(item.dataIndex);
    }
  });
  data.forEach((item) => {
    let itemArr = [];
    dataIndexArr.forEach((x) => {
      itemArr.push(item[x]);
    });
    dataArr.push(itemArr);
  });
  //可以看成一个整体,表头和报表数据都是excel数据,每一行都是一个数组,
  // 表头在excel顶部 所以表头放最前面 splice(0,0,[])
  dataArr.splice(0, 0, ...titleArr);
  //创建新文件
  var newFile = XLSX.utils.book_new();
  //新sheet
  var newFileSheet = XLSX.utils.aoa_to_sheet(dataArr);
  //合并
  newFileSheet['!merges'] = merges;
  //sheet添加到文件
  XLSX.utils.book_append_sheet(newFile, newFileSheet, sheetName);
  // 导出 Excel
  XLSX.writeFile(newFile, `${fileName}.xls`);
};

总结

  1. XLSX.utils.book_new()创建新文件
  2. XLSX.utils.aoa_to_sheet 新sheet表
  3. merges数组表示对行和列进行合并,c表示column(列),r表示row(行),s表示start(开始),e表示end(结束),索引从0开始

http://www.niftyadmin.cn/n/5072621.html

相关文章

Linux 部署项目

部署 Linux 部署项目1. 宝塔部署1.1 前端部署1.2 后端部署 2. docker 部署2.1 后端部署2.2 前端部署 3. 跨域问题3.1 Nginx 代理&#xff08;推荐&#xff09;3.2 修改后端服务3.3 添加 web 全局请求拦截器 4. 域名解析DNSPod添加域名 Linux 部署项目 1. 宝塔部署 准备工作&am…

vue 2个接口同步执行

案例1&#xff1a; // 接口1的请求 const promise1 axios.get(/api/data1) // 接口2的请求 const promise2 axios.get(/api/data2) // 同步执行两个接口 Promise.all([promise1, promise2]).then(results >{ // 对两个接口返回的数据进行操作 const result1 results[0…

python学习之5个让日常编码更方便简单的库

今天为大家分享 5 个让日常编码更简单的 Python 库&#xff0c;全文3900字&#xff0c;阅读15分钟。 一、sh https://github.com/amoffat/sh 如果曾经在 Python 中使用过 subprocess 库&#xff0c;那么我们很有可能对它感到失望&#xff0c;它不是最直观的库&#xff0c;可…

大数据软件项目的数据清洗

大数据软件项目中的数据清洗是数据预处理过程中的重要环节&#xff0c;用于识别和纠正数据集中的错误、不一致性和不完整性。虽然没有专门的"数据清洗开发框架"&#xff0c;但有许多工具和库可用于数据清洗任务。以下是一些常见的数据清洗工具和库&#xff0c;可以与…

《淘宝商品数据采集案例》按关键字搜索淘宝商品API接口获取商品销量、优惠价、商品标题等参数示例

关键词搜索商品接口的作用是提供搜索功能&#xff0c;让用户根据关键词在电商平台上搜索商品&#xff0c;并根据搜索条件和偏好获取相关的商品列表和推荐结果&#xff0c;提高用户购物体验和准确度。对于电商平台而言&#xff0c;这个接口也能帮助用户发现更多商品、提升销量和…

【科学文献计量】pybibx模块安装与使用

pybibx模块安装与使用 1. pybibx模块介绍2. pybibx模块安装3. pybibx模块使用测试手动反爬虫: 原博地址 https://blog.csdn.net/lys_828/article/details/133674169 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取…

docker搭建Jenkins及基本使用

1. 搭建 查询镜像 docker search jenkins下载镜像 docker pull jenkins/jenkins启动容器 #创建文件夹 mkdir -p /home/jenkins_home #权限 chmod 777 /home/jenkins_home #启动Jenkins docker run -d -uroot -p 9095:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home…

黑科技-Android

1热更新&#xff08;热修复&#xff09;&#xff1a;apk不用发版&#xff0c;就能修复bug 原理&#xff1a;我们修复好了bug的时候&#xff0c;把那些有改动的java源码编译成class&#xff0c;再打包成dex&#xff0c;然后通过反射技术放到dexElements数组的最前面&#xff0c;…