POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

这篇具有很好参考价值的文章主要介绍了POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

POI

简介:

POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。
所以POI的主要功能是可以用Java操作Microsoft Office的相关文件,但是一般我们都是用来操作Excel相关文件。

优劣势:
Jxl:消耗小,图片和图形支持有限
Poi:功能更加完善

POI包结构

HSSF:读写Microsoft Excel XLS
XSSF:读写Microsoft Excel XLSX
HWPF:读写Microsoft Word DOC
HSLF:读写 Microsoft PowerPoint
本次课主要使用XSSF包下的类
注意:
操作Excel文件区分版本:
2003版本(包含2003)以前的扩展名为.xls需要用HSSFWorkbook类操作
2007版本(包含2007)以后的扩展名为.xlsx需要用XSSFWorkbook类操作

POI入门案例

  • XSSFWorkbook:工作簿
  • XSSFSheet:工作表
  • Row:行
  • Cell:单元格

从Excel文件中读取数据

  1. 获取工作簿
  2. 获取工作表
  3. 遍历工作表,获取行对象
  4. 便利行对象,过去单元格对象
  5. 获的单元格的值

导入poi相关的依赖

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

编写Java代码

package com.aaa.read;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 19:38
 * @description :从Excel文件中读取数据
 */
public class Demo1 {
    public static void main(String[] args) throws IOException {
        //获取工作簿
        XSSFWorkbook workbook = new XSSFWorkbook("E:\\mind\\poi\\student.xlsx");
        //获取工作表
        XSSFSheet sheet = workbook.getSheetAt(0);
        //获取行
        for (Row row : sheet) {
            //获取单元格
            for (Cell cell : row) {
                //设置单元格的数据类型
                cell.setCellType(CellType.STRING);
                System.out.println(cell.getStringCellValue());
            }
        }
    }
}

普通for循环

package com.aaa.read;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 19:38
 * @description :
 */
public class Demo1 {
    public static void main(String[] args) throws IOException {
        //获取工作簿
        XSSFWorkbook workbook = new XSSFWorkbook("E:\\mind\\poi\\student.xlsx");
        //获取工作表
        XSSFSheet sheet = workbook.getSheetAt(0);
        //获取行
        /*for (Row row : sheet) {
            //获取单元格
            for (Cell cell : row) {
                //设置单元格的数据类型
                cell.setCellType(CellType.STRING);
                System.out.println(cell.getStringCellValue());
            }
        }*/
        for (int i = 0; i <= sheet.getLastRowNum(); i++) {
            XSSFRow row = sheet.getRow(i);
            if (row!=null){
                for (int j = 0; j < row.getLastCellNum(); j++) {
                    //获取单元格
                    XSSFCell cell = row.getCell(j);
                    if (cell!=null){
                        //设置单元格的数据类型
                        cell.setCellType(CellType.STRING);
                        System.out.println(cell);
                    }
                }
            }

        }
        //释放资源
        workbook.close();
    }
}

测试结果:
测试的时候一定把要操作的表关闭,否则两个进程都要读这个文件就会报下面的错

Exception in thread “main” java.io.FileNotFoundException: E:\mind\poi\student.xlsx (另一个程序正在使用此文件,进程无法访问。)

正常情况:
POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

向Excel文件中写入数据

  1. 创建一个Excel表格
  2. 创建工作表
  3. 创建行
  4. 创建单元格赋值
  5. 通过输出流将对象下载到磁盘

编写Java代码

package com.aaa.write;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 20:13
 * @description :
 * 1. 创建一个Excel表格
 * 2. 创建工作表
 * 3. 创建行
 * 4. 创建单元格赋值
 * 5. 通过输出流将对象下载到磁盘
 */
public class Demo2 {
    public static void main(String[] args) throws IOException {
        //1. 创建一个Excel表格
        XSSFWorkbook workbook = new XSSFWorkbook();
        //2. 创建工作表
        XSSFSheet sheet = workbook.createSheet("工作表一");
        //3. 创建行
        XSSFRow row1 = sheet.createRow(0);
        //4. 创建单元格赋值
        XSSFCell cell1 = row1.createCell(0);
        cell1.setCellValue("陈娇花");
        XSSFCell cell2 = row1.createCell(1);
        cell2.setCellValue("赵铁牛 ");
        XSSFRow row2 = sheet.createRow(1);
        XSSFCell cell21 = row2.createCell(0);
        cell21.setCellValue("陈娇花");
        XSSFCell cell22 = row2.createCell(1);
        cell22.setCellValue("赵铁牛");

        //5. 通过输出流将对象下载到磁盘
        FileOutputStream fileOutputStream = new FileOutputStream("E:\\mind\\poi\\aaa.xlsx");
        workbook.write(fileOutputStream);
        //刷新输出流
        fileOutputStream.flush();
        //6. 释放资源
        fileOutputStream.close();
        workbook.close();
    }
}

执行结果:
POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

将Excel表格中的数据插入数据库

导入数据库连接相关的jar包

        <!--阿里巴巴数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.11</version>
        </dependency>
        <!--MySQL连接-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>

配置MybatisConfig.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/poidemo?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;allowPublicKeyRetrieval=true"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="com.aaa.dao"/>
    </mappers>
</configuration>

编写实体类

package com.aaa.domain;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 20:56
 * @description :
 */
public class Product {
    Integer id;
    String name;
    Double price;
    Integer pstock;
    //省略get,set方法,全参构造器,无参构造器,toString方法
    //大家写的时候记得写上
}

操作类
获取工作簿
过去工作表
获取最后一行的行号
排除第一行
将每一行封装到一个list中
设置单元格类型
将每一行的内容封装为一个实体类
将每一个实体类加入到productList中
关闭资源

package com.aaa.web;

import com.aaa.domain.Product;
import com.aaa.service.ProductService;
import com.aaa.service.impl.ProductServiceImpl;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 20:48
 * @description : 将Excel表中的数据添加到数据库
 */
public class InsertDB {
    public static void main(String[] args) throws IOException {
        ProductService productService = new ProductServiceImpl();
        //Scanner输入文件地址
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入文件地址(不包含空格)");
        String path = scanner.nextLine();
        //调用getObjList方法,得到Product的list集合
        List<Product> objList = getObjList(path);
        System.out.println(objList);
        //插入数据库
        Integer save = productService.save(objList);
        System.out.println("成功插入"+save+"条数据");
    }

    /**
     * 传入文件地址,返回list集合
     * @param path
     * @return
     * @throws IOException
     */
    public static List<Product> getObjList(String path) throws IOException {
        List<Product> productList = new ArrayList<>();
        //获取工作簿
        XSSFWorkbook workbook = new XSSFWorkbook(path);
        //过去工作表
        XSSFSheet sheet = workbook.getSheetAt(0);
        //获取最后一行的行号
        int lastRowNum = sheet.getLastRowNum();
        //排除第一行
        for (int i = 1; i <= lastRowNum; i++) {
            //获取每一行
            XSSFRow row = sheet.getRow(i);
            if (row!=null){
                //将每一行封装到一个list中
                List<String> list = new ArrayList<>();
                for (Cell cell : row) {
                    if (cell!=null){
                        //设置单元格类型
                        cell.setCellType(CellType.STRING);
                        String value = cell.getStringCellValue();
                        list.add(value);
                    }
                }
                //将每一行的内容封装为一个实体类
                Product  product = new Product(Integer.parseInt(list.get(0)),list.get(1),Double.parseDouble(list.get(2)),Integer.parseInt(list.get(3)));
                //将每一个实体类加入到productList中
                productList.add(product);
            }
        }
        //关闭资源
        workbook.close();
        return productList;
    }
}

service层接口

package com.aaa.service;

import com.aaa.domain.Product;

import java.util.List;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 21:26
 * @description :
 */
public interface ProductService {
    Integer save(List<Product> list);
}

service层实现类

package com.aaa.service.impl;

import com.aaa.dao.ProductDao;
import com.aaa.domain.Product;
import com.aaa.service.ProductService;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 21:27
 * @description :
 */
public class ProductServiceImpl implements ProductService {
    //mybatis配置文件的路径
    String resource = "MybatisConfig.xml";
    InputStream inputStream;
    {
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    //得到SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    /**
     * 添加方法
     * @param product
     * @return
     */
    @Override
    public Integer save(List<Product> product) {
        //开启SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取代理对象
        ProductDao productDao1 = sqlSession.getMapper(ProductDao.class);
        int i = 0;
        for (Product product1 : product) {
            //插入数据
            Integer save = productDao1.save(product1);
            if (save!=null){
                i = i+save;
            }
            sqlSession.commit();
        }
        sqlSession.close();
        return i;
    }
}

dao接口

package com.aaa.dao;

import com.aaa.domain.Product;

import java.util.List;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 21:28
 * @description :
 */
public interface ProductDao {
    Integer save(Product product);
}

mapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.dao.ProductDao">

    <insert id="save">
        insert into product (id,name,price,pstock) values
                    (#{id},#{name},#{price},#{pstock})
    </insert>
</mapper>

运行InsertDB.class
POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

将数据库中的数据添加到Excel表

编写操作类

新建工作簿
新建工作表
第一行,表头
将每条list中的商品写入工作表中,从第二行开始,第一行,表头
获取文件输出流
工作簿写入
刷新输出流
关闭资源

package com.aaa.web;

import com.aaa.domain.Product;
import com.aaa.service.ProductService;
import com.aaa.service.impl.ProductServiceImpl;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Scanner;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 23:07
 * @description : 将数据库中的数据添加到Excel表
 */
public class InsertExcel {
    public static void main(String[] args) throws IOException {
        ProductService productService = new ProductServiceImpl();
        //查询所有
        List<Product> productList = productService.getAll();
        System.out.println(productList);
        //输入路径
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入文件的输出路径");
        String path = scanner.nextLine();
        //调用getWorkbook方法
        InsertExcel.getWorkbook(productList, path);
        //如果执行成功打印
        System.out.println("操作成功");
    }

    /**
     * 将数据库中的数据,写入Excel文件中
     * @param productList
     * @param path
     * @throws IOException
     */
    public static void getWorkbook(List<Product> productList,String path) throws IOException {
        //新建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        //新建工作表
        XSSFSheet sheet = workbook.createSheet("商品表");
        //第一行,表头
        XSSFRow row = sheet.createRow(0);
        XSSFCell cell = row.createCell(0);
        cell.setCellValue("商品编号");
        XSSFCell cell1 = row.createCell(1);
        cell1.setCellValue("商品名称");
        XSSFCell cell2 = row.createCell(2);
        cell2.setCellValue("商品价格(单位:元/斤)");
        XSSFCell cell3 = row.createCell(3);
        cell3.setCellValue("商品库存(单位:吨)");
        //将每条list中的商品写入工作表中,从第二行开始,第一行,表头
        for (int i = 1; i <= productList.size(); i++) {
            //获取product(注意是i-1)
            Product product = productList.get(i-1);
            //插入数据
            XSSFRow row1 = sheet.createRow(i);
            XSSFCell cell4 = row1.createCell(0);
            cell4.setCellValue(product.getId());
            XSSFCell cell5 = row1.createCell(1);
            cell5.setCellValue(product.getName());
            XSSFCell cell6 = row1.createCell(2);
            cell6.setCellValue(product.getPrice());
            XSSFCell cell7 = row1.createCell(3);
            cell7.setCellValue(product.getPstock());
        }
        //获取文件输出流
        FileOutputStream fos = new FileOutputStream(path);
        //工作簿写入
        workbook.write(fos);
        //刷新输出流
        fos.flush();
        //关闭资源
        fos.close();
        workbook.close();
    }
}

service接口

package com.aaa.service;

import com.aaa.domain.Product;

import java.util.List;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 21:26
 * @description :
 */
public interface ProductService {
    /**
     * 插入数据
     * @param list
     * @return
     */
    Integer save(List<Product> list);

    /**
     * 查询所有
     * @return
     */
    List<Product> getAll();
}

service实现类

package com.aaa.service.impl;

import com.aaa.dao.ProductDao;
import com.aaa.domain.Product;
import com.aaa.service.ProductService;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 21:27
 * @description :
 */
public class ProductServiceImpl implements ProductService {
    //mybatis配置文件的路径
    String resource = "MybatisConfig.xml";
    InputStream inputStream;
    {
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    //得到SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    /**
     * 添加方法
     * @param
     * @return
     */
    @Override
    public Integer save(List<Product> productList) {
        //开启SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取代理对象
        ProductDao productDao = sqlSession.getMapper(ProductDao.class);
        int i = 0;
        for (Product product : productList) {
            //插入数据
            Integer save = productDao.save(product);
            if (save!=null){
                i = i+save;
            }
            sqlSession.commit();
        }
        sqlSession.close();
        return i;
    }

    /**
     * 查询所有
     * @return List<Product>
     */
    @Override
    public List<Product> getAll() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取代理对象
        ProductDao productDao = sqlSession.getMapper(ProductDao.class);
        //关闭资源
        List<Product> productList = productDao.getAll();
        sqlSession.close();
        return productList;
    }
}

dao接口

package com.aaa.dao;

import com.aaa.domain.Product;

import java.util.List;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 21:28
 * @description :
 */
public interface ProductDao {
    Integer save(Product product);

    List<Product> getAll();
}

mapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.dao.ProductDao">

    <insert id="save">
        insert into product (id,name,price,pstock) values
                    (#{id},#{name},#{price},#{pstock})
    </insert>
    <select id="getAll" resultType="com.aaa.domain.Product">
        select *
        from product;
    </select>
</mapper>

运行InsertExcel.class
POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

设置样式

在Demo2中基础上

package com.aaa.write;

import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author : 尚腾飞
 * @version : 1.0
 * @createTime : 2022/9/26 20:13
 * @description :
 * 1. 创建一个Excel表格
 * 2. 创建工作表
 * 3. 创建行
 * 4. 创建单元格赋值
 * 5. 通过输出流将对象下载到磁盘
 */
public class Demo2 {
    public static void main(String[] args) throws IOException {
        //1. 创建一个Excel表格
        XSSFWorkbook workbook = new XSSFWorkbook();
        //2. 创建工作表
        XSSFSheet sheet = workbook.createSheet("工作表一");
        
        //单元格样式
        XSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex());
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //字体样式
        XSSFFont font = workbook.createFont();
        font.setFontName("宋体");
        font.setColor(IndexedColors.PINK.getIndex());
        cellStyle.setFont(font);

        //3. 创建行
        XSSFRow row1 = sheet.createRow(0);
        //4. 创建单元格赋值
        XSSFCell cell1 = row1.createCell(0);
        cell1.setCellStyle(cellStyle);
        cell1.setCellValue("陈娇花");
        XSSFCell cell2 = row1.createCell(1);
        cell2.setCellStyle(cellStyle);
        cell2.setCellValue("赵铁牛 ");
        XSSFRow row2 = sheet.createRow(1);
        XSSFCell cell21 = row2.createCell(0);
        cell21.setCellValue("陈娇花");
        XSSFCell cell22 = row2.createCell(1);
        cell22.setCellValue("赵铁牛");

        //5. 通过输出流将对象下载到磁盘
        FileOutputStream fileOutputStream = new FileOutputStream("E:\\mind\\poi\\aaa.xlsx");
        workbook.write(fileOutputStream);
        //刷新输出流
        fileOutputStream.flush();
        //6. 释放资源
        fileOutputStream.close();
        workbook.close();
    }
}

测试结果:
POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表
全文参考的下面教程:视频特点人美声甜,年轻貌美
Java教程使用POI读取excel文档
https://www.bilibili.com/video/BV1bJ411G7Aw?p=1&vd_source=0eeffffe21421dad257058d19ad2f1d2

EasyPoi

But

apache的缺点

但是apache存在一些缺点

  1. 对于复杂的Excel模板样式需要编写大量的代码实现
  2. 大数据量的读取/导成效率低下,甚至可能内存溢出

为了解决上述poi的缺点,国内有很多开源项目对poi进行了封装,大大减少代码量,使其能够更简单的被我们使用并提高开发效率,例如EasyPoi,Excel4J,HuTools等优秀的开源项目。我们这次以EasyPoi为例

easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板语言(熟悉的表达式语法),完成以前复杂的写法。文章来源地址https://www.toymoban.com/news/detail-498905.html

使用EasyPoi

1. 导入jar

  1. SpringBoot
<!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-spring-boot-starter -->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>
  1. 普通maven项目
        <!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-base -->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.4.0</version>
        </dependency>

2. 编写实体类

package com.aaa.domain;

import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;

import java.util.Date;

/**
 * @author : 尚腾飞(838449693@qq.com)
 * @version : 1.0
 * @createTime : 2022/10/8 20:01
 * @description :
 */
@Data
public class Userinfo {
    @Excel(name = "id")
    private Integer id;
    @Excel(name = "用户名")
    private String username;
    @Excel(name = "密码")
    private String password;
    @Excel(name = "手机号")
    private String phone;
    @Excel(name = "部门编号")
    private Integer deptid;
    @Excel(name = "头像")
    private String avatar;
    @Excel(name = "创建时间" ,format = "yyyy-MM-dd HH:mm:ss")
    private Date createtime;
}

3. 编写service,controller

package com.aaa.web;

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import com.aaa.domain.Userinfo;
import com.aaa.service.impl.UserinfoServiceImpl;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

/**
 * @author : 尚腾飞(838449693@qq.com)
 * @version : 1.0
 * @createTime : 2022/10/8 20:45
 * @description :
 */
public class EasyPoiController {
    public static void main(String[] args) throws  Exception {
        UserinfoServiceImpl userinfoService = new UserinfoServiceImpl();
        List<Userinfo> userinfoList = userinfoService.findAll();
        System.out.println(userinfoList);
        ExportParams exportParams = new ExportParams("员工表", "员工表", ExcelType.XSSF);
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, Userinfo.class, userinfoList);
        FileOutputStream fos = new FileOutputStream(new File("E:\\mind\\poi\\userinfo.xlsx"));
        workbook.write(fos);
        //刷新输出流
        fos.flush();
        //关闭资源
        fos.close();
        workbook.close();
    }
}

到了这里,关于POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python读取写入数据到Excel文件

    【Linux干货教程】Ubuntu Linux 换源详细教程 大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! Hello,各位看官老爷们好,洲洲已

    2024年02月12日
    浏览(76)
  • Python读取excel文件往Elasticsearch数据插入时遇到的问题

    背景:需要完成一个功能,使用python读取一个excel文件进行读取数据,然后将这些数据直接保存到Elasticsearch中。 用到的工具:python、Elasticsearch 一、问题描述 在将项目部署到甲方的时候,出现用户导入文件无法进行正常插入到Elasticsearch中的情况,当时看的服务器的日志,报

    2023年04月09日
    浏览(41)
  • python读取表格数据将pdf文件转excel文件最新可用方法

    【ptf】 【转换后Excel】 可用看到表格内容位置一致,转换完成 (1)安装camelot库 (2)转换代码

    2024年02月15日
    浏览(38)
  • java通过poi读取excel中的日期类型

    Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2020,而Excel中输入的是 2020/10/12 或 2020-10-12 poi处理excel时,当excel没有明确指明是哪个类型的数据时,poi很可能处理单元格的日期数据时就有可能是一串数字,而使用java程序基本无法转换。 Excel数据处理: Exc

    2024年02月15日
    浏览(43)
  • c#关于文件夹/文件/文本读取遍历,写入还有表格的读取的一些方法

    c#遍历文件夹下的各种文件 将一些log写入到文本文件中: fs.Seek(offset, whence);移动文件读取的指针到指定位置 offset:开始的偏移量,也就是代表需要移动偏移的字节数 whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始

    2024年02月01日
    浏览(54)
  • 【Python笔记】Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面

    这篇文章,主要介绍Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面。 目录 一、Python读取excel 1.1、安装xlrd库 1.2、打开excel工作簿 1.3、获取sheet工作表 1.4、操作row数据行 1.5、操作column数据列 1.6、操作单元格 二、读取excel数据保存到MySQL 2.1、完整代码 2.

    2024年02月15日
    浏览(54)
  • Matlab:将数据写入 Excel 电子表格

    要将工作区中的表导出到 Microsoft® Excel® 电子表格文件中,请使用 writetable 函数。您可以将工作区中的数据导出到文件中的任何工作表,以及导出到该工作表中的任何位置。默认情况下,writetable 将表数据写入到文件中的第一张工作表,并从单元格 A1 处开始。 例如,创建一个

    2024年02月09日
    浏览(51)
  • 将R语言中的表格数据输出为Excel文件

    将R语言中的表格数据输出为Excel文件 在R语言中,我们可以使用各种方法将表格数据输出为Excel文件。Excel文件是一种常用的电子表格格式,它在数据分析和可视化方面具有广泛的应用。本文将介绍几种常用的方法来实现这个目标,并提供相应的源代码示例。 方法一:使用 w

    2024年02月07日
    浏览(32)
  • ArrayList/MySQL数据批量写入Excel表格

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

    2024年02月09日
    浏览(34)
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件

    一 读取excel内容、并放入字典 1 读取excel文件 2 读取value,舍弃行号 3 读取为字典 一 读取excel内容、并放入字典(完整代码) 二、将字典内容写入 excel文件 1 假设已有字典内容为: 即student列表里有4个字典, 第一个字典里面有3对key-value \\\"num\\\": 1, \\\"name\\\": \\\"cod1\\\", \\\"wfm\\\": 0.1 2 导入Workb

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包