首页 > 其他分享 >EasyExcelUtil导出

EasyExcelUtil导出

时间:2024-09-14 09:02:07浏览次数:10  
标签:headList bodyList 导出 ArrayList List add new EasyExcelUtil

package com.istrong.seatom.utils;

import cn.hutool.core.collection.ListUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import io.micrometer.core.lang.NonNull;
import org.apache.poi.ss.usermodel.Cell;

import java.util.*;

/**
 * @program: sxsoft_expert
 * @ClassName DownLoadFileUtil
 * @description:
 * @author: 黄涛
 * @create: 2023-07-17 16:17
 * @Version 1.0
 **/
public class EasyExcelUtil {

    /**
     * 无实体导出List<Map<String,Object>>
     * @param path 文件路径
     * @param dataList 数据
     */
    public static void EasyExcelNoModel(String path,List<Map<String,Object>> dataList) {
        String sheetName="Sheet1";
        if(!dataList.isEmpty()) {

            //获取首个Map对象的key,用于作为表头
            Set<String> keySet = dataList.get(0).keySet();
            List<List<String>> headList = new ArrayList<>();
            for (String key : keySet) {
                List<String> headTitleList = new ArrayList<>();
                headTitleList.add(key);
                headList.add(headTitleList);

            }
            List<List<Object>> bodyList = new ArrayList<List<Object>>();
            //设置导出的数据内容
            for (Map<String, Object> m : dataList) {
                List<Object> data = new ArrayList<Object>();
                for (int i = 0; i < headList.size(); i++) {
                    data.add(m.get(headList.get(i).get(0)));
                }
                bodyList.add(data);
            }

            EasyExcel.write(path).head(headList).registerConverter(new TimestampConverter())
                    .registerWriteHandler(new AutoColumnWidthWriteHandler())
                    .sheet(sheetName).doWrite(bodyList);
        }


    }

    /**
     * 无实体导出,列排序
     * @param path
     * @param bodyList 注意add顺序必须和heads一致
     * @param heads 表头排序顺序
     */
    public static void EasyExcelNoModel(String path,List<List<Object>> bodyList, List<String> heads) {
        String sheetName= "Sheet1";
        if(!bodyList.isEmpty()) {
            final List<List<String>> headList = ListUtil.toList();
            heads.stream().forEach(key->{
                List<String> headTitleList =  ListUtil.toList();
                headTitleList.add(key);
                headList.add(headTitleList);
            });
            EasyExcel.write(path).head(headList).registerConverter(new TimestampConverter())
                    .registerWriteHandler(new AutoColumnWidthWriteHandler())
                    .sheet(sheetName).doWrite(bodyList);
        }
    }



    /**
     * 无实体导出,列排序
     * @param path
     * @param bodyList 注意add顺序必须和heads一致
     */
    public static void EasyExcelProject(String path,List<List<Object>> bodyList) {
        String sheetName= "Sheet1";
        if(!bodyList.isEmpty()) {
            final List<List<String>> headList = ListUtil.toList();

            List<String> headTitle0 = new ArrayList<String>();
            List<String> headTitle1 = new ArrayList<String>();
            List<String> headTitle2 = new ArrayList<String>();
            List<String> headTitle3 = new ArrayList<String>();
            List<String> headTitle4 = new ArrayList<String>();
            List<String> headTitle5 = new ArrayList<String>();
            List<String> headTitle6 = new ArrayList<String>();
            List<String> headTitle7 = new ArrayList<String>();
            List<String> headTitle8 = new ArrayList<String>();
            List<String> headTitle9 = new ArrayList<String>();
            List<String> headTitle10 = new ArrayList<String>();

            headTitle0.add("序号");
            headTitle1.add("地区");
            headTitle2.add("项目数量");
            headTitle3.add("占比");
            headTitle4.add("已完成项目数量");
            headTitle5.add("进行中项目数量");
            headTitle6.add("进行中项目数量");
            headTitle7.add("进行中项目数量");
            headTitle8.add("进行中项目数量");
            headTitle9.add("进行中项目数量");
            headTitle10.add("进行中项目数量");

            headTitle0.add("序号");
            headTitle1.add("地区");
            headTitle2.add("项目数量");
            headTitle3.add("占比");
            headTitle4.add("已完成项目数量");
            headTitle5.add("总数量");
            headTitle6.add("合同签订");
            headTitle7.add("项目组成立");
            headTitle8.add("从业告知");
            headTitle9.add("现场勘验/检测检验");
            headTitle10.add("其他");
            headList.add(headTitle0);
            headList.add(headTitle1);
            headList.add(headTitle2);
            headList.add(headTitle3);
            headList.add(headTitle4);
            headList.add(headTitle5);
            headList.add(headTitle6);
            headList.add(headTitle7);
            headList.add(headTitle8);
            headList.add(headTitle9);
            headList.add(headTitle10);

            EasyExcel.write(path).head(headList).registerConverter(new TimestampConverter())
                    .registerWriteHandler(new AutoColumnWidthWriteHandler())
                    .sheet(sheetName).doWrite(bodyList);
        }
    }

    //自适应列宽
    private final static class AutoColumnWidthWriteHandler extends AbstractColumnWidthStyleStrategy {

        private static final int MAX_COLUMN_WIDTH = 255;
        // 因为在自动列宽的过程中,有些设置地方让列宽显得紧凑,所以做出了个判断
        private static final int COLUMN_WIDTH = 20;

        private final Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>();

        protected void setColumnWidth(@NonNull WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList, @NonNull Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
            boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
            if (needSetWidth) {
                Map<Integer, Integer> maxColumnWidthMap = CACHE.computeIfAbsent(writeSheetHolder.getSheetNo(), k -> new HashMap<>());

                Integer columnWidth = this.dataLength(cellDataList, cell, isHead);
                if (columnWidth >= 0) {
                    if (columnWidth > MAX_COLUMN_WIDTH) {
                        columnWidth = MAX_COLUMN_WIDTH;
                    } else {
                        if (columnWidth < COLUMN_WIDTH) {
                            columnWidth = columnWidth * 2;
                        }
                    }
                    Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());
                    if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
                        maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);
                        writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
                    }
                }
            }
        }

        private Integer dataLength(List<WriteCellData<?>> cellDataList, Cell cell, @NonNull Boolean isHead) {
            if (isHead) {
                return cell.getStringCellValue().getBytes().length;
            } else {
                WriteCellData<?> cellData = cellDataList.get(0);
                CellDataTypeEnum type = cellData.getType();
                if (type == null) {
                    return -1;
                } else {
                    switch (type) {
                        case STRING:
                            return cellData.getStringValue().getBytes().length;
                        case BOOLEAN:
                            return cellData.getBooleanValue().toString().getBytes().length;
                        case NUMBER:
                            return cellData.getNumberValue().toString().getBytes().length;
                        default:
                            return -1;
                    }
                }
            }
        }

    }
}

 

标签:headList,bodyList,导出,ArrayList,List,add,new,EasyExcelUtil
From: https://www.cnblogs.com/privateLogs/p/18413282

相关文章

  • Allegro导出PCB正反面丝印为CAD文件的方法
    Allegro导出PCB正反面丝印为CAD文件总共分为两个大步骤,第一步为导出顶底层的dxf文件,第二步为将底层的dxf文件水平镜像。一、Allegro导出顶底层的dxf文件第一步把想导的层显示出来,一次只能导出一个图层,导出顶层时选择ADT。最后导出就行了。底层导出时,第一步选择ADB......
  • Springboot项目中配置pom将资源文件导出jar包外
    缘起:​ 这些天在不断完善前面写的项目,然后今天突然发现这么一件事:resources目录下的文件都被打包到jar包中了,这样就会导致一件事,对于一些resources中的文件更新换代以及yml配置的修改肥肠麻烦。于是就寻思着把文件导出。​ 为了调试和打包之后的资源依旧能用同一段代码正常访问......
  • Google Earth Engine——对Landsat8图像进行归约分析和应用函数导出数据等流程
    目录加载和过滤图像集合利用图像波段组合减少图像集合隔离图像计算NDVI编写函数在集合上映射函数构建最环保的像素组合绘制NDVI随时间变化的图表导出RGB图像整理你的代码加载和过滤图像集合搜索“Landsat8TOA”并将结果添加到导入部分。将集合重命名为......
  • torch.nn.Embedding的导入与导出
    简介及导入转自:torch.nn.Embedding使用在RNN模型的训练过程中,需要用到词嵌入,使用torch.nn.Embedding可以快速的完成:只需要初始化torch.nn.Embedding(n,m)即可(n是单词总数,m是词向量的维度)(n是嵌入字典的大小,m是嵌入向量的维度。)。注意:embedding开始是随机的,在训练的时候会自......
  • DataGrip 2021.2.2如何导出.sql文件
     目录Blue留声机: 导出文件:1、点击要导出的table,选择Exportwith'mysqldump'2、选择一下数据库备份数据的路径,选择导出sql文件存放的位置导入文件: 概览:1.第一步,进入运维管理端,通过命令行进入数据库2.第二步,切换数据库3.第三步,导入sql文件source无法导入sql文件......
  • 淘宝店电话采集工具 淘宝商家信息导出软件教程步骤
    导语:在电商行业中,淘宝是一个极其重要的平台。为了更好地进行市场调查、数据分析以及商业合作,我们经常需要采集淘宝店铺的电话号码和商家信息。为了简化这个过程,本教程将向大家介绍如何使用Python编写实现这些功能的淘宝店电话采集工具及商家信息导出软件。步骤1:安装必要的工具和库......
  • java 按word模板导出,部分字段为富文本内容
    1、pom引用依赖包<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.1</version><exclusions><exclusion>......
  • 中文关键字检索分析-导出到csv或者excel-多文件或文件夹-使用python和asyncio和pandas
    1.02版本把原来的tab一个个拼接成文件输出,改成pandas的dataframe使用asyncio库来使用协程,但是测试下来速度好像是差不多的。可能速度太快了,没能很好的测出来差异。原来的最初的代码是java版本的,现在用python重写一遍java版本使用completableFuture来异步IO,主要是文件输......
  • 微信聊天记录导出教程
    微信作为现代人日常沟通的重要工具,承载了大量的信息和回忆。有时,我们可能需要将微信聊天记录导出,以便于保存、备份或分享。下面,就为大家详细介绍一种导出微信聊天记录的方法。通过下图软件,可以很方便的导出微信聊天记录。使用说明:1、将压缩文件解压到固定位置,不要随意移动......
  • 文件导出:Hutool 导出 Excel文件
     使用Hutool实现Excel数据导出。导出Excel文件为两个Sheet页。1.设备基本信息:包括设备编号、设备名称、设备位置等。2.设备维护记录:包括设备维护日期、维护人员、维护内容等。 1.Hutool简介Hutool是一个功能丰富的Java工具库,其中包含用于Excel文件处理的......