react导出excel文件的四种方式

 更新时间:2023年11月23日 10:37:29   作者:摸鱼第一人  
本文主要介绍了react导出excel文件的四种方式,主要包括原生js导出,使用 js-export-excel,使用xlsx导出, 使用react-html-table-to-excel,感兴趣的可以了解一下

 一共总结了四种方法  前两种适用范围比较广泛 可以适用导出多级表头合并等,第三种方法导出的文件比较中规中矩,但是支持导出多张sheet表。第四种方法导出不推荐使用

1、原生js导出  (带样式)

/**
 *  原生JS导出为excel文件
 */
export const jsToExcel = (id, name) => {
    //window.location.href='<%=basePath%>pmb/excelShowInfo.do';
    //获取表格
    var exportFileContent = document.getElementById(id).outerHTML;
    //设置格式为Excel,表格内容通过btoa转化为base64,此方法只在文件较小时使用(小于1M)
    //exportFileContent=window.btoa(unescape(encodeURIComponent(exportFileContent)));
    //var link = "data:"+MIMEType+";base64," + exportFileContent;
    //使用Blob
    var blob = new Blob([exportFileContent], { type: "text/plain;charset=utf-8" });         //解决中文乱码问题
    blob = new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type });
    //设置链接
    var link = window.URL.createObjectURL(blob);
    var a = document.createElement("a");    //创建a标签
    a.download = name;  //设置被下载的超链接目标(文件名)   建议文件后缀为 .xls
    a.href = link;                            //设置a标签的链接
    document.body.appendChild(a);            //a标签添加到页面
    a.click();                                //设置a标签触发单击事件
    document.body.removeChild(a);            //移除a标签
}

使用方式   

<table id='table_report'>...</table>
<div onClick={() => jsToExcel('table_report', '现券交易异常日报.xls')}>导出</div>

 如果想导出xlsx格式请参考方法2,方法1仅改文件后缀 不会被Excel识别  但是wps可以

2、使用xlsx导出(此方法导出的excel文件无样式,但导出的文件格式是 xlsx格式的) 

首先安装xlsx  : yarn add xlsx

import XLSX from "xlsx"


/**
 *  用XLSX导出 (导出无样式)
 */
export const exportExcel = (id, name) => {
    var exportFileContent = document.getElementById(id).cloneNode(true);
    var wb = XLSX.utils.table_to_book(exportFileContent, { sheet: "sheet1" });
    XLSX.writeFile(wb, name);
}

    使用方式

<table id='table_report'>...</table>
<div onClick = {() => exportExcel('table_report', '现券交易异常日报.xlsx')}>导出</div>

3、使用 js-export-excel (可以导出多张sheet表)

首先安装 js-export-excel  : yarn add js-export-excel 

import { Table } from 'antd';
import { columns } from './config';
import ExportJsonExcel from "js-export-excel";
import { PlusCircleOutlined } from '@ant-design/icons';

function Tables(props) {
  const { isLoading, viewData, data } = props;
  // data格式
  const data1 = [
    {
      adID: "张三",
      leaveCount: 26,
      leaveDuration: 82,
      leaveType: "调休",
      name: "张三"
    },
    {
      adID: "张三1",
      leaveCount: 526,
      leaveDuration: 82,
      leaveType: "调休",
      name: "张三1"
    },
    {
      adID: "张三1",
      leaveCount: 26,
      leaveDuration: 852,
      leaveType: "调休",
      name: "张三1"
    },
    {
      adID: "张三1",
      leaveCount: 256,
      leaveDuration: 82,
      leaveType: "调休",
      name: "张三1"
    },
  ]
  /**
   *  导出数据
   */
  const handleExportCurrentExcel = (data) => {
    let sheetFilter = ["name", "leaveType", "leaveCount", "leaveDuration"];
    let sheetFilter2 = ["name", "leaveType", "leaveCount", "leaveDuration"];
    let option = {};
    option.fileName = '考勤分析结果';
    option.datas = [
      {
        sheetData: data1,
        sheetName: '考勤分析结果',
        sheetFilter: sheetFilter,
        sheetHeader: ['姓名', '类型', '次数', '时长'],
        columnWidths: [10, 10, 10, 10]
      },
      {
        sheetData: data1,  //比较懒得造数据了  跟表1数据一样
        sheetName: '考勤分析结果222',
        sheetFilter: sheetFilter2,
        sheetHeader: ['姓名22', '类型22', '次数22', '时长22'],
        columnWidths: [10, 10, 10, 10]
      },
    ];
    var toExcel = new ExportJsonExcel(option); //new
    toExcel.saveExcel(); //保存
  }

  return (
    <div>
      <div className='exportButton' onClick={() => handleExportCurrentExcel(data)}>
        <PlusCircleOutlined className='icon-but' />
        导出当前数据
      </div>
      <Table
        loading={isLoading}
        columns={columns}
        dataSource={viewData}
        pagination={false}
      />
    </div>
  )
}
export default Tables;

4、第四种 使用react-html-table-to-excel  不推荐使用

安装   react-html-table-to-excel : yarn add react-html-table-to-excel

import React, {  useRef, useEffect } from 'react';
import { Table } from "antd";
import {  columns } from './config';
import ReactHTMLTableToExcel from 'react-html-table-to-excel';
import styles from './index.module.less';
function StudyExcel() {

    const data = [
        {
            key: '0',
            name: '张三'
        },
        {
            key: '1',
            name: '赵四'
        },
        {
            key: '2',
            name: '王五'
        },
        {
            key: '3',
            name: '齐六'
        }
    ];

    // 用ref来获取组件按钮实例,使用里面的方法
    const buttonRef = useRef(null);

    // 禁止组件按钮的默认点击事件
    useEffect(() => {
        const button = document.querySelector('#test-table-xls-button');
        button.style['pointer-events'] = ('none');
    }, []);


    // 导出表格
    const exportTable = (e) => {
        e.stopPropagation();
        const table = document.getElementsByTagName('table');
        const container = document.querySelector('#hiddenBox');
        const tempTable = document.createElement('table');
        tempTable.appendChild(table[0]);
        tempTable.setAttribute('id', 'table-to-xls');                    // 给table添加id,值与按钮上的table字段对应
        container.appendChild(tempTable);                                // 把创建的节点添加到页面容器中
        buttonRef.current.handleDownload();                              // 手动触发下载
    };
    return (
        <div style={{ backgroundColor: '#fff' }} className={styles.container}>
            <span onClick={(e) => exportTable(e)}>
                <ReactHTMLTableToExcel
                    width={1900}
                    ref={buttonRef}
                    table="table-to-xls"
                    id='test-table-xls-button'
                    filename='回购日报'
                    sheet='表1'
                    buttonText='导出Excel'
                />
            </span>
            <Table
                columns={columns}
                dataSource={data}
                bordered
                pagination={false}
            />
            <div id='hiddenBox' style={{ position: 'absolute', zIndex: -1, top: 0, left: 0 }} />
        </div>
    )
}
export default StudyExcel;

 到此这篇关于react导出excel文件的四种方式的文章就介绍到这了,更多相关react导出excel文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 教你如何从 html 实现一个 react

    教你如何从 html 实现一个 react

    react是一个简单的javascript UI库,用于构建高效、快速的用户界面。它是一个轻量级库,因此很受欢迎。接下来通过本文给大家分享从 html 实现一个 react的方法,一起看看吧
    2021-07-07
  • React Hooks使用方法全方位介绍

    React Hooks使用方法全方位介绍

    在react类组件(class)写法中,有setState和生命周期对状态进行管理,但是在函数组件中不存在这些,故引入hooks(版本:>=16.8),使开发者在非class的情况下使用更多react特性
    2023-03-03
  • React Class组件生命周期及执行顺序

    React Class组件生命周期及执行顺序

    这篇文章主要介绍了React Class组件生命周期,包括react组件的两种定义方式和class组件不同阶段生命周期函数执行顺序,本文给大家介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • 从零开始搭建一个react项目开发

    从零开始搭建一个react项目开发

    这篇文章主要介绍了从零开始搭建一个react项目开发,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • React+Ant Design开发环境搭建的实现步骤

    React+Ant Design开发环境搭建的实现步骤

    这篇文章主要介绍了React+Ant Design开发环境搭建的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • React精髓!一篇全概括小结(急速)

    React精髓!一篇全概括小结(急速)

    这篇文章主要介绍了React精髓!一篇全概括小结(急速),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 在React框架中实现一些AngularJS中ng指令的例子

    在React框架中实现一些AngularJS中ng指令的例子

    这篇文章主要介绍了在JavaScript的React框架中实现一些AngularJS指令的例子,React使用Virtual DOM因而与普通的js框架有些不同,需要的朋友可以参考下
    2016-03-03
  • React 项目中动态设置环境变量

    React 项目中动态设置环境变量

    本文主要介绍了React 项目中动态设置环境变量,本文将介绍两种常用的方法,使用 dotenv 库和通过命令行参数传递环境变量,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 浅析React中的受控组件和非受控组件

    浅析React中的受控组件和非受控组件

    具体来说这是一种react非受控组件,其状态是在input的react内部控制,不受调用者控制。可以使用受控组件来实现。下面就说说这个React中的受控组件与非受控组件的相关知识,感兴趣的朋友一起看看吧
    2021-05-05
  • React编程中需要注意的两个错误

    React编程中需要注意的两个错误

    React可以说是前端的先驱者,它总是会引领整个前端的潮流。 但我们在使用也经常会遇到错误,下面这篇文章主要给大家介绍了关于React编程中需要注意的两个错误,需要的朋友可以参考下
    2021-05-05

最新评论