代码编织梦想

一、应用场景
excel文件中的数据导入到数据库当中

二、代码

  1. 依赖
 <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>

这里尽量保持版本一致,否则可能会发生冲突。我使用5.0.0版本的poi、poi-ooxml与4.1.2版本的poi-ooxml-schemas产生了冲突问题。
2.实现方法


import cn.hutool.core.io.IoUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.shandy.project.api.basic.vo.ExcelDataVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.Color;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.*;

@Slf4j
public class ExcelExportUtil {

    // 2003版本
    public static final String EXCEL_2003L = ".xls";

    // 2007版本
    public static final String EXCEL_2007U = ".xlsx";

    // 表头字段
    public static final String HEADER = "header";

   /**
     * @param in excel文件输入流 ,fileName 文件名称
     * @Description:获取IO流中的数据,组装成List<List<Map<String, Object>>>对象
     */
    public static List<List<Map<String, Object>>> getListByExcel(InputStream in, String fileName) throws Exception {
        //创建Excel工作薄
        Workbook work = getWorkbook(in, fileName);
        if (null == work) {
            throw new Exception("创建Excel工作薄为空!");
        }
        Sheet sheet = null;  //页数
        Row row = null;  //行数
        Cell cell = null;  //列数
        List<List<Map<String, Object>>> sheets = new ArrayList<>();   //记录每一页的信息
        //遍历Excel中所有的sheet
        for (int i = 0; i < work.getNumberOfSheets(); i++) {
            sheet = work.getSheetAt(i);
            if (sheet == null) {
                continue;
            }
            List<Map<String, Object>> page = new ArrayList(); // 存储一页(sheet)的信息,一页有多行,一个Map就是一行
            //遍历当前sheet中的所有行
            List<String> headers = new ArrayList<>(); // 存放表头信息
            int start = -1;
            for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
                row = sheet.getRow(j);
                if (row == null) {
                    continue;
                }
                if (start == -1) {
                	//第一次遇到非空行,记录为开始位置
                    start = j;
                }
                Map<String, Object> rowMap = new HashMap<>(); // 存放excel每一行信息 key为表头名,value为单元格值
                //遍历所有的列(或者说遍历一行的单元格)
                for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                    cell = row.getCell(y);
                    if (cell == null) {
                        continue;
                    }
                    if (j == start) {
                        //记录表头信息
                        headers.add(getValue(cell));
                    } else {
                    	//记录非表头信息,key - val 形式
                        rowMap.put(headers.get(y), getValue(cell));
                    }
                }
                if (rowMap.size() > 0) {
                    page.add(rowMap);
                }
            }
            sheets.add(page);
        }
        return sheets;
    }

/**
     * @param is 输入流,fileName 文件名
     * @Description:根据文件后缀,选择excel版本
     */
    public static Workbook getWorkbook(InputStream is, String fileName) throws Exception {
        Workbook wb = null;
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        if (Objects.equals(fileType, EXCEL_2003L)) {
            wb = new HSSFWorkbook(is);  //2003版本的workbook对象
        } else if (Objects.equals(fileType, EXCEL_2007U)) {
            wb = new XSSFWorkbook(is);  //2007+版本的workbook对象
        } else {
            throw new Exception("解析的文件格式有误!");
        }
        return wb;
    }

}

3.有图
现有如下1个包含2个sheet页的excel文件
sheet1表格
在这里插入图片描述
sheet2表格
在这里插入图片描述

生成的数据格式:1个大集合,包含2个小集合,每个小集合里包含2个map。

[
[{"网站":"www.bd.com","邮箱":"b@139.com","电话":"13607467788"},{"网站":"www.ac.com", "邮箱":"a@139.COM", "电话":"15607468899"}],
[{"名称":"bp","分类":0, "logo文字":"连花清瘟", "logo地址":"中国"},{"名称":"gf","分类":1, "logo文字":"辣椒炒肉", "logo地址":"湖南"}]
]

一般不同的sheet所装的内容主题也不同,这样我们只需要对大数组里的每个小数组做不同的处理,在每个小数组里封装了map,map就是一行的记录,转化为java类就可以存入到数据库当中

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46552655/article/details/128390005

java实现excel表格导入数据库表_summerdirewof的博客-爱代码爱编程_java实现excel导入数据库

导入excel就是一个上传excel文件,然后获取excel文件数据,然后处理数据并插入到数据库的过程 一、上传excel 前端jsp页面,我的是index.jsp   在页面中我自己加入了一个下载上传文件的功能,其中超链接就是下载 <%@ page language="java" contentType="text/html; charse

java 读取excel文件并导入数据库_&波吉&的博客-爱代码爱编程

导入: 先导入依赖: <!-- 文件上传 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>

excel的下载与快速大量导入数据库数据_leegaki的博客-爱代码爱编程

使用EasyPoi下载数据以excel格式导出 首先在你的项目中导入依赖 <!--对办公表格操作的简单poi--> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-s

考研数学模拟卷经典题总结-爱代码爱编程

考研数学模拟卷经典题总结 1、李林四套卷的题目: 【23考研数学】李林老师四套卷两道二重积分计算题目分享——利用雅可比变换大大减少计算量与利用轮换对称性解题_哔哩哔哩_bilibili 上面两道题

拥抱实体经济,可以说是当下互联网参与者的首要选择-爱代码爱编程

  拥抱实体经济,绝对是当下互联网玩家们的首要选择。无论是头部的互联网企业来讲,还是新生的互联网玩家而言,它们都不约而同地将关注的焦点聚焦在了这样一个方向上。   透过这一点,我们可以非常明显地感受到,一个全新的互联网行业的新风口,已然来临。然而,我们又不能将这样一个时代看成是互联网时代的延续,因为无论是从它的底层逻辑,还是从它的上层打法上来看,基本上都发

java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试-爱代码爱编程

java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计项目材料管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:Layui、HTML、CSS、JS、JQ

java版将excel表格数据导入数据库_java导入excel到数据库-爱代码爱编程

将Excel中的数据存入数据库与在系统中操作的唯一不同就是数据源不同,其中从Excel中导入数据的关键在于从Excel中读取每行数据。 如何从excel中读取数据?下面代码是简单的导入过程,具体需要根据自己的数据来改。 读

java导入excel文档到数据库_java导入excel数据-爱代码爱编程

Java导入Excel文档到数据库 前言业务背景如何导入 认识需要接触到的类Workbook.classHSSFWorkbook.classXSSFWorkbook.classSXSSFWorkbook.