当前位置: 代码网 > it编程>编程语言>Java > SpringBoot2.x使用POI实现导入数据到Excel

SpringBoot2.x使用POI实现导入数据到Excel

2025年07月22日 Java 我要评论
一、前言最近做一个推送服务将系统某些报表,通过邮件附件的形式推送给指定的人,首先我们需要在服务端生成报表的excel文档。生成excel文档采用的是poi的方式。二、pom引入相应的jar包引入三个p

一、前言

最近做一个推送服务将系统某些报表,通过邮件附件的形式推送给指定的人,首先我们需要在服务端生成报表的excel文档。生成excel文档采用的是poi的方式。

二、pom引入相应的jar包

引入三个poi相关的jar包

        <dependency>
            <groupid>org.apache.poi</groupid>
            <artifactid>poi</artifactid>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupid>org.apache.poi</groupid>
            <artifactid>poi-ooxml</artifactid>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupid>org.apache.poi</groupid>
            <artifactid>poi-ooxml-schemas</artifactid>
            <version>4.1.2</version>
        </dependency>

注意:这三个jar包的版本号一定要保持一致。否则的话会引起异常,无法创建xssfworkbook

三、导出方法封装类

import lombok.extern.slf4j.slf4j;
import org.apache.http.client.utils.dateutils;
import org.apache.poi.ss.usermodel.cell;
import org.apache.poi.ss.usermodel.row;
import org.apache.poi.ss.usermodel.sheet;
import org.apache.poi.ss.usermodel.workbook;
import org.apache.poi.xssf.usermodel.xssfworkbook;

import java.io.fileoutputstream;
import java.io.ioexception;
import java.sql.timestamp;
import java.util.*;

/**
 * poi导出excel封装
 * @author lenny
 * @date 20210715
 */
@slf4j
public class excelutil {
    /**
     * @param filename excel文件名
     * @param headmap  表头map
     * @param datalist 表格数据
     */
    public static string exportexcel(string filename,map<string, string> headmap, list<map<string, object>> datalist) {
        string fullpath="";
        workbook workbook = exportxlsx(filename, headmap, datalist);
        fileoutputstream outputstream=null;
        try {
            //将生成的excel存储在系统根目录下excel文件夹中
            string path=commonutil.getrunningdirectory()+"\\excel\\";
            fullpath=path+filename;
            outputstream = new fileoutputstream(path+filename);
            workbook.write(outputstream);
        } catch (exception e) {
            e.printstacktrace();
        } finally {
            if (outputstream != null) {
                try {
                    outputstream.close();
                } catch (ioexception e) {
                    e.printstacktrace();
                }
            }
        }
        //返回文件所在的目录
        return fullpath;
    }

    /**
     * 导出数据
     *
     * @param headmap 表头map
     * @param datalist 导出的数据
     */
    public static workbook exportxlsx(string sheetname, map<string, string> headmap, list<map<string, object>> datalist) {
        try {
            xssfworkbook workbook = new xssfworkbook();
            sheet sheet = workbook.createsheet(sheetname);
            //初始化行列索引
            int rowindex = 0, columnindex = 0;
            set<string> keys = headmap.keyset();
            //表头
            row row = sheet.createrow(rowindex++);
            for (string key : keys) {
                cell cell = row.createcell(columnindex++);
                cell.setcellvalue(headmap.get(key));
            }
            //内容
            if (datalist != null && !datalist.isempty()) {
                for (map<string, object> map : datalist) {
                    row = sheet.createrow(rowindex++);
                    columnindex = 0;
                    for (string key : keys) {
                        cell cell = row.createcell(columnindex++);
                        setcellvalue(cell, map.get(key));
                    }
                }
            }
            return workbook;
        }catch (exception e){
            log.error(e.tostring());
            return null;
        }
    }

    /**
     * 填充单元格内容
     * @param cell
     * @param obj
     */
    private static void setcellvalue(cell cell, object obj) {
        if (obj == null) {
            return;
        }
        if (obj instanceof string) {
            cell.setcellvalue((string) obj);
        } else if (obj instanceof date) {
            date date = (date) obj;
            if (date != null) {
                cell.setcellvalue(dateutils.formatdate(date));
            }
        } else if (obj instanceof calendar) {
            calendar calendar = (calendar) obj;
            if (calendar != null) {
                cell.setcellvalue(dateutils.formatdate(calendar.gettime()));
            }
        } else if (obj instanceof timestamp) {
            timestamp timestamp = (timestamp) obj;
            if (timestamp != null) {
                cell.setcellvalue(dateutils.formatdate(new date(timestamp.gettime())));
            }
        } else if (obj instanceof double) {
            cell.setcellvalue((double) obj);
        } else {
            cell.setcellvalue(obj.tostring());
        }
    }
}

其中使用到了封装的获取系统根目录的方法,方法实现如下:

    /**
     * 得到程序运行的根目录
     * @return
     */
    public static string getrunningdirectory()
    {
        return system.getproperty("user.dir");
    }

四、调用方法执行生成excel操作

    /**
     * 导出adas报警
     * @param reportadaslist
     * @param language
     * @param timediff
     * @return
     */
    public static string exportadasreport(list<reportadaslist> reportadaslist, int language, int timediff) {
        //表头
        map<string, string> headnamemap = new linkedhashmap<string, string>();
        headnamemap.put("agentname", getheadname("agentname",language));
        headnamemap.put("vehiclename", getheadname("vehiclename",language));
        headnamemap.put("assetid", getheadname("assetid",language));
        headnamemap.put("alarmtype", getheadname("alarmtype",language));
        headnamemap.put("alarmlevel", getheadname("alarmlevel",language));
        headnamemap.put("starttime", getheadname("starttime",language));
        headnamemap.put("endtime", getheadname("endtime",language));
        headnamemap.put("drivername", getheadname("drivername",language));
        headnamemap.put("startaddress", getheadname("startaddress",language));
        headnamemap.put("endaddress", getheadname("endaddress",language));
        headnamemap.put("processstatus", getheadname("processstatus",language));
        headnamemap.put("processcontext", getheadname("processcontext",language));
        headnamemap.put("processtime", getheadname("processtime",language));
        //表格数据
        list<map<string, object>> datalist = new arraylist<map<string, object>>();
        for(reportadaslist item : reportadaslist){
            map<string, object> map = new hashmap<string, object>();
            map.put("agentname", item.getagentname());
            map.put("vehiclename", item.getvehiclename());
            map.put("assetid", item.getassetid());
            map.put("alarmtype", language==1?item.getcnname():item.getenname());
            map.put("alarmlevel", getalarmlevel(item.getalarmlevel(),language));
            map.put("starttime", commonutil.getlocaltime(item.getstarttime(),timediff));
            map.put("endtime", commonutil.getlocaltime(item.getendtime(),timediff));
            map.put("drivername", item.getdrivername());
            map.put("startaddress", commonutil.geocoding(string.valueof(item.getstartlatitude()),string.valueof(item.getstartlongitude()),language));
            map.put("endaddress", commonutil.geocoding(string.valueof(item.getendlatitude()),string.valueof(item.getendlongitude()),language));
            map.put("processstatus", getprocessstatus(item.getprocessstatus(),language));
            map.put("processcontext", item.getprocesscontext());
            map.put("processtime", commonutil.getlocaltime(item.getprocesstime(),timediff));
            datalist.add(map);
        }
        string filename = "";
        if(language==1) {
            filename= commonconstants.cn_report_adas;
        }else {
            filename=commonconstants.en_report_adas;
        }
        filename=filename+".xlsx";
        string fullpath = excelutil.exportexcel(filename,headnamemap,datalist);
        return fullpath;
    }

这里大家可以根据自己的系统自行调整,最后封装成headmap(表头字段)与list<map<string, object>>(数据列表)即可。

到此这篇关于springboot2.x使用poi实现导入数据到excel的文章就介绍到这了,更多相关springboot poi导入数据到excel内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com