首页 > 数据库 >ArrayList/MySQL数据批量写入Excel表格

ArrayList/MySQL数据批量写入Excel表格

时间:2023-09-12 17:22:21浏览次数:42  
标签:String ArrayList Excel new param MySQL import public WriteDataBean

ArrayList/MySQL数据集合写入Excel 1.文章概述:   写入 Excel 文件通常需要使用一些库或工具,而"EasyExcel"通常是指的阿里巴巴开源的EasyExcel库。这个库可以让我们在Java中简便地进行Excel文件的读写操作。 2.导入配置:

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.2.0</version>
</dependency>
 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
</dependency>

3.Excel模板类

package com.ccc.bean.tools_enty;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;


@NoArgsConstructor
@Data
public class WriteDataBean  implements Comparable {
   // Excel标头名称
    @ExcelProperty("a")
    private String a;
    @ExcelProperty("b")
    private String b;

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b = b;
    }

    @Override
    public int compareTo(Object o) {
//        //可设置排序
//        if (o instance of WriteDataBean){ 
// WechatOfficialAccountBean wechatOfficialAccountBean= (WechatOfficialAccountBean) o;
// return this.getUpload_time().hashCode()-wechatOfficialAccountBean.getUpload_time().hashCode();
// }
throw new ClassCastException("不能转换 WriteDataBean ");
 } 
}

  

4.工具类示例代码:

package com.ccc.tools;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.felephantst.bean.tools_enty.WriteDataBean;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName: FileTool
 * @Description TODO 操作文件工具类
 * @Author: 东霖
 * @Date: 2023/9/12 13:19
 * @Version 1.0
 **/
public class FileTool {

    /**
     * 读取指定文件
     *
     * @param filePath
     * @return 返回一个字符串集合
     */
    public static List<String> readFile(String filePath) {
        List<String> stringList = new ArrayList<>();
        try {
            FileReader fr = new FileReader(filePath);
            BufferedReader bf = new BufferedReader(fr);
            String str;
            // 按行读取字符串
            while ((str = bf.readLine()) != null) {
                stringList.add(str);
            }
            bf.close();
            fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringList;
    }

    /**
     * TODO: 小数据量写出数据到 Excel(2000条左右用这个)
     *
     * @param bean        模板类
     * @param outFilePath 输出路径全称:test.xlsx
     * @param sheetName   excel Sheet 名称
     * @param collect     数据集
     */
    public static void writeMinDataExcel(Class<?> bean, String outFilePath, String sheetName, ArrayList collect) {
        OutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(outFilePath);
            EasyExcel.write(outputStream, bean).sheet(sheetName).doWrite(collect);
            //写出到文件
            outputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * TODO: 大数据量写出数据到 Excel(2000条左右用这个)
     *
     * @param bean        模板类
     * @param outFilePath 输出路径全称:test.xlsx
     * @param sheetName   excel Sheet 名称
     * @param sizeLimitDataList     数据集
     * @param sizeLimit   设置多少条数据为一个Sheet
     */
    public static void writeMaxDataExcel(Class<?> bean, String outFilePath, String sheetName, ArrayList sizeLimitDataList, Integer sizeLimit) {
        // 总Sheet数
        int num = sizeLimitDataList.size() / sizeLimit + (sizeLimitDataList.size() % sizeLimit > 0 ? 1 : 0);
        // 输出流
        OutputStream outputStream = null;
        try {
            // 以字节流的形式输出响应正文
            outputStream = new FileOutputStream(outFilePath);
            try (ExcelWriter excelWriter = EasyExcel.write(outputStream, bean).build()) {
                // 中间list调用写入
                List<?> partList = null;
                WriteSheet writeSheet =null;
                for (int i = 0; i < num; i++) {
                    // 每次写入都要创建WriteSheet, 这里注意必须指定sheetNo, 并且sheetName必须不一样
                    writeSheet = EasyExcel.writerSheet(i, sheetName + (i + 1)).build();
                    // 截取批次长度的list
                    partList = sizeLimitDataList.subList(0, sizeLimit);
                    // 分批业务逻辑处理- 打印替代
                    excelWriter.write(partList, writeSheet);
                    // 去除已经处理的部分 (Arrays.asList()方式生成的数据不能进行此修改操作,会报错)
                    partList.clear();
                }
                // 获取最后一次截取后的剩余列表数据
                if (!sizeLimitDataList.isEmpty()) {
                    // 业务逻辑数据处理
                    excelWriter.write(sizeLimitDataList, writeSheet);
                }
            }
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            } finally {
                if (outputStream != null) {
                    try {
                        outputStream.close();
                    } catch (IOException ex) {
                        throw new RuntimeException(ex);
                    }
                }
            }
        }

        public static void main (String[]args){
        WriteDataBean writeDataBean = new WriteDataBean();
        writeDataBean.setA("a");
        writeDataBean.setB("b");
        WriteDataBean writeDataBean1 = new WriteDataBean();
        writeDataBean1.setA("ad");
        writeDataBean1.setB("bd");
        objects.add(writeDataBean1);
        objects.add(writeDataBean);

        writeMaxDataExcel(WriteDataBean.class, "D://cdc.xlsx", "test", objects, 1);
        writeMinDataExcel(WriteDataBean.class, "D://cddc.xlsx", "test", objects);
    
    }
}

  

标签:String,ArrayList,Excel,new,param,MySQL,import,public,WriteDataBean
From: https://www.cnblogs.com/zhuzhu-you/p/17697195.html

相关文章

  • 使用EasyExcel实现无模板、全自定义Excel导出
    1需求背景最近公司需要做一个动态字段的Excel导出,大致的样式如下:实体类如下://部门实体类publicclassDepartment{privateStringcompanyName;privateStringname;privateStringfullName;privateStringleaderName;privateStringbusiness;......
  • MySQL篇:第二章_初识MySQL
    初始MySQLMySQL的背景1、前身属于瑞典的一家公司,MySQLAB2、08年被sun公司收购3、09年sun被oracle收购MySQL的优点1、开源、免费、成本低2、性能高、移植性也好3、体积小,便于安装数据库的好处​ 1、持久化数据到本地​ 2、可以实现结构化查询,方便管理​数据库相关概......
  • 21分钟MySQL基础入门
    MySQL 及快速的方式入门 MySQL。其实21分钟把下面语句之行一遍是没有问题的,要理解的话估计不止21分钟,对于初学者来说只需满足自己需求可以增删改查等简易的维护即可。目录开始使用登录MySQL创建数据库创建数据库表增删改查SELECTUPDATEINSERTDELETEWHEREAND和ORANDORORDERBYI......
  • N天爆肝数据库——MySQL(1)
    (N天爆肝数据库——MySQL(1))链接:link这是csdn专栏链接,大家可以看一看,提提意见数据库概念理解==数据库DB存储数据的仓库数据库管理系统DBMS操纵和管理数据库的大型软件==SQL操作关系型数据库的编程语言,定义了用一套操作关系型数据库同意标准学习SQL的作用SQL是一门......
  • 如何把Mysql注册为Windows服务
    我们在使用Mysql的时候,经常需要在命令行中开启mysql。如果把mysql做成服务的话会方便很多,下面小编就给大家分享一下如何把Mysql注册为Windows服务。操作方法01首先在cmd命令行中通过cd命令进入mysql的bin目录,这个目录下面有要使用的注册服务的命令,如下图所示02然后通......
  • mysql case when
    当使用MySQL进行查询时,可以使用CASE表达式来根据条件对结果进行分支处理。CASE表达式在SELECT语句中非常有用,可以根据不同的条件返回不同的值。在本文中,我们将介绍如何使用CASE表达式进行条件分支查询。假设我们有一个名为 transactions 的表,其中包含以下字段:tx_id、t......
  • mysql - 集群
    概念mysql集群大致有这几种应用:单点写入,多点同时读;单点写入,另一个备用;多点同时写,允许这么做,但是不推荐,冲突不好解决。基本原理主库(master)在事务提交时,将数据的变化事件(events)记录在二进制日志文件(binlog)中。主库推送“binlog中的日志事件”到从库的“中继日志(relay......
  • mysql8 - 1055报错
    在navicat上跑查询语句,不论执行什么都会报错[Err]1055-Expression#1ofORDERBYclauseisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'information_schema.PROFILING.SEQ'whichisnotfunctionallydependentoncolumnsinGROUPBYclause......
  • Excel
     =RANDBETWEEN(1,100)&INDEX($G$1:$G$4,RANDBETWEEN(1,4))&RANDBETWEEN(1,100)&"="在上一步公式运算后连接一个1到100的随机数,并且再连接一个“=”符号。公式完成后,点选此单元格,将鼠标置于单元格的右下角,待指针变成十字时,按住鼠标左键拖动填充需求单元格,注意不要超过辅助栏哦......
  • mysql - 压测常用命令
    常用--查看所有连接的情况showprocesslist;--查看当前系统的连接数showstatuslike'Threads_connected';--各类查询语句执行次数showstatuslike'com%';--试图连接mysql服务器的次数showstatuslike'Connections';--慢查询次数(时间超过long_query_time......