ToB企服应用市场:ToB评测及商务社交产业平台

标题: ArrayList/MySQL数据批量写入Excel表格 [打印本页]

作者: 缠丝猫    时间: 2023-9-14 10:46
标题: ArrayList/MySQL数据批量写入Excel表格
ArrayList/MySQL数据集合写入Excel1.文章概述:  写入 Excel 文件通常需要使用一些库或工具,而"EasyExcel"通常是指的阿里巴巴开源的EasyExcel库。这个库可以让我们在Java中简便地进行Excel文件的读写操作。2.导入配置:
  1. <dependency>
  2.             <groupId>com.alibaba</groupId>
  3.             <artifactId>easyexcel</artifactId>
  4.             <version>3.2.0</version>
  5. </dependency>
  6. <dependency>
  7.             <groupId>org.projectlombok</groupId>
  8.             <artifactId>lombok</artifactId>
  9.             <version>1.18.2</version>
  10. </dependency>
复制代码
3.Excel模板类
  1. package com.ccc.bean.tools_enty;
  2. import com.alibaba.excel.annotation.ExcelProperty;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. @NoArgsConstructor
  6. @Data
  7. public class WriteDataBean  implements Comparable {
  8.    // Excel标头名称
  9.     @ExcelProperty("a")
  10.     private String a;
  11.     @ExcelProperty("b")
  12.     private String b;
  13.     public String getA() {
  14.         return a;
  15.     }
  16.     public void setA(String a) {
  17.         this.a = a;
  18.     }
  19.     public String getB() {
  20.         return b;
  21.     }
  22.     public void setB(String b) {
  23.         this.b = b;
  24.     }
  25.     @Override
  26.     public int compareTo(Object o) {
  27. //        //可设置排序
  28. //        if (o instance of WriteDataBean){ <br>              // WechatOfficialAccountBean wechatOfficialAccountBean= (WechatOfficialAccountBean) o; <br>              // return this.getUpload_time().hashCode()-wechatOfficialAccountBean.getUpload_time().hashCode(); <br>       // } <br>        throw new ClassCastException("不能转换 WriteDataBean ");
复制代码
  1. <em id="__mceDel"> } <br>}</em>
复制代码
  
4.工具类示例代码:
  1. package com.ccc.tools;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.excel.ExcelWriter;
  4. import com.alibaba.excel.write.metadata.WriteSheet;
  5. import com.felephantst.bean.tools_enty.WriteDataBean;
  6. import java.io.*;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. /**
  10. * @ClassName: FileTool
  11. * @Description TODO 操作文件工具类
  12. * @Author: 东霖
  13. * @Date: 2023/9/12 13:19
  14. * @Version 1.0
  15. **/
  16. public class FileTool {
  17.     /**
  18.      * 读取指定文件
  19.      *
  20.      * @param filePath
  21.      * @return 返回一个字符串集合
  22.      */
  23.     public static List<String> readFile(String filePath) {
  24.         List<String> stringList = new ArrayList<>();
  25.         try {
  26.             FileReader fr = new FileReader(filePath);
  27.             BufferedReader bf = new BufferedReader(fr);
  28.             String str;
  29.             // 按行读取字符串
  30.             while ((str = bf.readLine()) != null) {
  31.                 stringList.add(str);
  32.             }
  33.             bf.close();
  34.             fr.close();
  35.         } catch (IOException e) {
  36.             e.printStackTrace();
  37.         }
  38.         return stringList;
  39.     }
  40.     /**
  41.      * TODO: 小数据量写出数据到 Excel(2000条左右用这个)
  42.      *
  43.      * @param bean        模板类
  44.      * @param outFilePath 输出路径全称:test.xlsx
  45.      * @param sheetName   excel Sheet 名称
  46.      * @param collect     数据集
  47.      */
  48.     public static void writeMinDataExcel(Class<?> bean, String outFilePath, String sheetName, ArrayList collect) {
  49.         OutputStream outputStream = null;
  50.         try {
  51.             outputStream = new FileOutputStream(outFilePath);
  52.             EasyExcel.write(outputStream, bean).sheet(sheetName).doWrite(collect);
  53.             //写出到文件
  54.             outputStream.close();
  55.         } catch (FileNotFoundException e) {
  56.             e.printStackTrace();
  57.         } catch (IOException e) {
  58.             e.printStackTrace();
  59.         }
  60.     }
  61.     /**
  62.      * TODO: 大数据量写出数据到 Excel(2000条左右用这个)
  63.      *
  64.      * @param bean        模板类
  65.      * @param outFilePath 输出路径全称:test.xlsx
  66.      * @param sheetName   excel Sheet 名称
  67.      * @param sizeLimitDataList     数据集
  68.      * @param sizeLimit   设置多少条数据为一个Sheet
  69.      */
  70.     public static void writeMaxDataExcel(Class<?> bean, String outFilePath, String sheetName, ArrayList sizeLimitDataList, Integer sizeLimit) {
  71.         // 总Sheet数
  72.         int num = sizeLimitDataList.size() / sizeLimit + (sizeLimitDataList.size() % sizeLimit > 0 ? 1 : 0);
  73.         // 输出流
  74.         OutputStream outputStream = null;
  75.         try {
  76.             // 以字节流的形式输出响应正文
  77.             outputStream = new FileOutputStream(outFilePath);
  78.             try (ExcelWriter excelWriter = EasyExcel.write(outputStream, bean).build()) {
  79.                 // 中间list调用写入
  80.                 List<?> partList = null;
  81.                 WriteSheet writeSheet =null;
  82.                 for (int i = 0; i < num; i++) {
  83.                     // 每次写入都要创建WriteSheet, 这里注意必须指定sheetNo, 并且sheetName必须不一样
  84.                     writeSheet = EasyExcel.writerSheet(i, sheetName + (i + 1)).build();
  85.                     // 截取批次长度的list
  86.                     partList = sizeLimitDataList.subList(0, sizeLimit);
  87.                     // 分批业务逻辑处理- 打印替代
  88.                     excelWriter.write(partList, writeSheet);
  89.                     // 去除已经处理的部分 (Arrays.asList()方式生成的数据不能进行此修改操作,会报错)
  90.                     partList.clear();
  91.                 }
  92.                 // 获取最后一次截取后的剩余列表数据
  93.                 if (!sizeLimitDataList.isEmpty()) {
  94.                     // 业务逻辑数据处理
  95.                     excelWriter.write(sizeLimitDataList, writeSheet);
  96.                 }
  97.             }
  98.             } catch (IOException ex) {
  99.                 throw new RuntimeException(ex);
  100.             } finally {
  101.                 if (outputStream != null) {
  102.                     try {
  103.                         outputStream.close();
  104.                     } catch (IOException ex) {
  105.                         throw new RuntimeException(ex);
  106.                     }
  107.                 }
  108.             }
  109.         }
  110.         public static void main (String[]args){
  111.         WriteDataBean writeDataBean = new WriteDataBean();
  112.         writeDataBean.setA("a");
  113.         writeDataBean.setB("b");
  114.         WriteDataBean writeDataBean1 = new WriteDataBean();
  115.         writeDataBean1.setA("ad");
  116.         writeDataBean1.setB("bd");
  117.         objects.add(writeDataBean1);
  118.         objects.add(writeDataBean);
  119.         writeMaxDataExcel(WriteDataBean.class, "D://cdc.xlsx", "test", objects, 1);
  120.         writeMinDataExcel(WriteDataBean.class, "D://cddc.xlsx", "test", objects);
  121.    
  122.     }
  123. }
复制代码
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4