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

news2024/10/7 10:25:31

前端导出excel表格
引入xlsx插件,不然应该是运行不起来的

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.coloradmin.cn/o/1065956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一座“城池”:泡泡玛特主题乐园背后,IP梦想照亮现实

“更适合中国宝宝体质”的主题乐园&#xff0c;被泡泡玛特造出来了。 9月26日&#xff0c;位于北京朝阳公园内的国内首个潮玩行业沉浸式 IP 主题乐园&#xff0c;也是泡泡玛特首个线下乐园——泡泡玛特城市乐园 POP LAND正式开园。 约4万平方米的空间中&#xff0c;泡泡玛特使…

java vue框架搭建

最近在使用spring boot 和vue .js搭建框架 首先用idea 创建demo 项目 使用mybatis 持久层框架&#xff0c;数据库mysql &#xff0c;maven构建项目 vue 使用命令nmp run build 构建后目录如下 把此项目dist下的static的文件夹拷贝到idea项目下的static&#xff0c;index.html…

开发工具:推荐几款非常漂亮的VScode主题

目录 Atom One Dark Theme Github Theme Night Owl Theme Night Owl JellyFish Theme Sublime Material Theme 深色 浅色 今天给大家推荐几款非常漂亮的VScode主题&#xff0c;值得收藏&#xff01; Atom One Dark Theme 它是市场上最好的深色主题之一。Atom 标志性的…

2023年中国旋挖钻机市场销量、竞争格局及行业发展趋势分析[图]

旋挖钻机是一种用于桩工基建项目中成孔作业等基础建设的工程机械。相比于其他桩工机械&#xff0c;旋挖钻机施工效率高&#xff0c;控制精度高&#xff0c;污染和噪音较小并且整机灵活度高&#xff0c;可以适应我国大部分土壤地质条件&#xff0c;如中东部地区砂土&#xff0c;…

卡尔曼滤波器设计及实例

1 卡尔曼滤波器基本原理 卡尔曼滤波常用于动态多变化系统中的状态估计&#xff0c;是一种通用性强的自回归滤波器。它的由来和NASA登月有关。其发明者鲁道夫.E.卡尔曼在一次访问NASA的时候&#xff0c;发现阿波罗计划中一个难点是轨道预测问题&#xff0c;因而提出了一种滤波器…

揭开黑客的神秘面纱:黑客文化、技术手段与防御策略

目录 1. 引言1.1 黑客的定义与起源1.2 黑客文化的形成与传承 2. 黑客的分类与目标2.1 道德黑客与恶意黑客2.2 黑客攻击的目标与动机解析 3. 黑客的技术手段3.1 网络入侵与渗透测试3.2 社会工程学与钓鱼攻击3.3 恶意软件与病毒传播3.4 数据泄露与身份盗窃 4. 防御黑客攻击的策略…

微信公众号怎么变更认证主体?

公众号迁移有什么作用&#xff1f;只能变更主体吗&#xff1f;公众号迁移是将原公众号的粉丝、违规记录、文章和素材库&#xff08;可选&#xff09;迁移至一个新的公众号。整体流程较为复杂&#xff0c;需花费7-10天。通过公众号迁移功能可以将A账号的粉丝、文章素材&#xff…

Bridge Champ助力我国桥牌阔步亚运, Web3游戏为传统项目注入创新活力

本届杭州亚运会,中国桥牌队表现杰出,共斩获1金1银1铜佳绩,其中女子团体夺得冠军,混合团体获得亚军。这充分展现了我国桥牌的实力,也彰显了桥牌作为亚运会体育竞技项目的影响力。与此同时,Web3游戏Bridge Champ为传统桥牌项目带来创新模式,将有望推动桥牌运动在亚运舞台上焕发新…

Node.js操作MySQL8.0数据库无法连接

Node.js操作MySQL8.0数据库无法连接 原创&#xff1a;丶无殇  2023-10-07 报错内容 使用node.js连接数据库MySQL 8时候&#xff0c;报错ER_NOT_SUPPORTED_AUTH_MODE&#xff0c;并且提示Client does not support authentication protocol requested by server; consider upg…

blender UV展开

快捷键&#xff1a;选面可以一点&#xff0c;选线或点变形&#xff0c;g 移动&#xff0c;l 孤岛化 a全选 在Shading视图下&#xff0c;给mesh建立一个栅格图的纹理 变成这个样子 UV实时展开&#xff1a; 在UV editing模式下&#xff0c;打开左右实时同步 焊接shift选中左边两个…

张量-形状变换相关函数

tf.shape(input,name None)它有两个参数,input和name,input可以是一个张量,也可以是一个数组和list。该函数返回的是input的形状(shape),而且一个类型为int32的张量。 示例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()array [[[1,1,1],[2,2,2]],…

第三课-软件升级-Stable Diffusion教程

前言: 虽然第二课已经安装好了 SD,但你可能在其它地方课程中,会发现很多人用的和你的界面差距很大。这篇文章会讲一些容易忽略或者常常需要做的操作,不一定要完全照做,以后再回过头看看也可以。 1.控制类型 问题:为什么别人有“控制类型”部分,而我没有?如下红色方框…

微软AD身份增强方案,让IT运维省心更高效

Windows AD域为企业数字化办公提供了强有力的支撑&#xff0c;但由于互联网技术的飞速发展&#xff0c;AD域在现代企业办公场景中也面临了一些挑战。 某企业使用AD域控管理工具&#xff0c;在对接邮箱、电脑、网络时均会用到AD域账号。出于安全考虑&#xff0c;公司要求每三个月…

3D模型格式转换工具HOOPS Exchange助力Halocline开发VR

挑战&#xff1a; 支持客户群使用各种CAD系统和CAD文件格式。快速准确的加载可视化硬件数据。提供访问模型详细信息&#xff0c;同时确保高帧频性能。 结果&#xff1a; 确保支持标准文件格式和来自领先工程软件包的CAD数据。 通过查看简化模型或根据需要访问高层次的细节&am…

第五课 树与图

文章目录 第五课 树与图lc94.二叉树的中序遍历--简单题目描述代码展示 lc589.N叉树的层序遍历--中等题目描述代码展示 lc297.二叉树的序列化和反序列化--困难题目描述代码展示 lc105.从前序与中序遍历序列构造二叉树--中等题目描述代码展示 lc106.从中序与后序遍历序列构造二叉…

JavaScript入门——基础知识(3)

一、运算符 1.1 赋值运算符 目标&#xff1a;能够通过使用赋值运算符简化代码 赋值运算符&#xff1a;对变量进行赋值的运算符 将等号右边的值赋予给左边&#xff0c;要求左边必须是一个容器其他赋值运算符&#xff1a; -*/%使用这些运算符可以在对变量赋值时进行快速操作 例…

基于vue的MOBA类游戏攻略分享平台springboot23

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

PHP 个人愿望众筹网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 个人愿望众筹网站系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php 个人愿望众筹网站 代码 https://download.csdn.net/download/qq_41221322/8…

从一坨代码说起

一、前言 下图所示这一坨代码是为了生成HTML格式邮件正文内容&#xff0c;如果邮件内容要稍微调整一下&#xff0c;这种代码怎么维护&#xff1f; 好吧&#xff0c;其实这是一篇与邮件有关的文章&#xff0c;SMTP发送邮件 介绍了邮件发送各种方式及SMTP各种端口&#xff0c;从…

回顾C++

大一的时候学过C&#xff0c;当时学得也不深&#xff0c;考试也是糊弄过去的&#xff0c;最近刷力扣的时候&#xff0c;决定一边刷题&#xff0c;一边复习和学习C&#xff0c;在此记录一些C的知识点。反正遇到一点就记录一点&#xff0c;会一直更新。