{{小仓鼠爱攒食物}}POI

一、简介
Apache POI 是 Apache 软件基金会的开放源码函式库,POI 提供 API 给 Java 程序对 Microsoft Office 格式档案读和写的功能。
二、POI特点:
2.1 效率高
2. 2 支持公式,宏,一些企业应用上 会非常实用
3. 3. 能够修饰单元格属性
4. 4. 支持字体、数字、日期操作
5. 5. API 丰富,支持多种模式的读写
6. 6. 支持大数量大文件的读写操作
因此:
对于报表类的,涉及月份数据量,多表数据聚合在一起建议使用 POI。
三、POI对象和JXL对象

四、POI导出

<!--引入POI的Jar开始-->
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <!--引入POI的Jar结束-->
  // 简单的导出一个Excel文档
    @Test
    public void poiOutput1Test() throws Exception{

        // 1.创建工作薄
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();

        // 2.创建工作表
        HSSFSheet hssfSheet = hssfWorkbook.createSheet("英雄");

        // 3.创建行 参数:创建工作表的第几行
        HSSFRow hssfRow = hssfSheet.createRow(0);

        // 4.创建单元格 参数:创建本行的第几个单元格
        HSSFCell hssfCell = hssfRow.createCell(0);

        // 5.给单元格赋值
        hssfCell.setCellValue("李白");

        // 6.把这个文件导出
        hssfWorkbook.write(new FileOutputStream(new File("d:/poiOutput1Test.xls")));

    }

程序运行结果:
在这里插入图片描述

// 将ArrayList<Hero>类型的数据导出
    // 测试
    // 运行此单元测试
    // ok
    @Test
    public void poiOutput2Test() throws Exception{

        // 1.创建工作薄
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();

        // 2.创建工作表
        HSSFSheet hssfSheet = hssfWorkbook.createSheet("英雄名单");

        // 3.创建数据
        Hero hero1 = new Hero("1", "李白", new Date());
        Hero hero2 = new Hero("2", "韩信", new Date());
        Hero hero3 = new Hero("3", "马克菠萝", new Date());
        ArrayList<Hero> heroArrayList = new ArrayList<>();
        heroArrayList.add(hero1);
        heroArrayList.add(hero2);
        heroArrayList.add(hero3);

        // 4.创建标题行
        HSSFRow titleRow = hssfSheet.createRow(0);
        String[] strings = {"id","姓名","生日"};
        for(int i = 0; i < strings.length; i++){
            titleRow.createCell(i).setCellValue(strings[i]);
        }

        // 5.创建填充内容
        for (int i = 0; i < heroArrayList.size(); i++){
            HSSFRow row = hssfSheet.createRow(i + 1);
            row.createCell(0).setCellValue(heroArrayList.get(i).getId());
            row.createCell(1).setCellValue(heroArrayList.get(i).getName());
            row.createCell(2).setCellValue(heroArrayList.get(i).getBir());
        }

        // 6.将内容输出
        hssfWorkbook.write(new FileOutputStream(new File("d:/poiOutput2Test.xls")));


    }
package com.baizhi.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

@Data // getter() setter() toString() equals() hashCode() 无参构造
@Accessors(chain = true) // 支持链式调用
@AllArgsConstructor
public class Hero implements Serializable {
    private String id;
    private String name;
    private Date bir;
}

在这里插入图片描述

// 将ArrayList<Hero>类型的数据导出
    // 测试
    // 运行此单元测试
    // ok
    @Test
    public void poiOutput2Test() throws Exception{

        // 1.创建工作薄
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();

        // 2.创建工作表
        HSSFSheet hssfSheet = hssfWorkbook.createSheet("英雄名单");
            // 2.1创建单元格样式
        HSSFDataFormat hssfDataFormat = hssfWorkbook.createDataFormat(); // ---创建DataFormat
        short format = hssfDataFormat.getFormat("yyyy年mm月dd日");
            // 2.2把时间格式设置进单元格样式里面
        HSSFCellStyle hssfCellStyle = hssfWorkbook.createCellStyle();
        hssfCellStyle.setDataFormat(format);



        // 3.创建数据
        Hero hero1 = new Hero("1", "李白", new Date());
        Hero hero2 = new Hero("2", "韩信", new Date());
        Hero hero3 = new Hero("3", "马克菠萝", new Date());
        ArrayList<Hero> heroArrayList = new ArrayList<>();
        heroArrayList.add(hero1);
        heroArrayList.add(hero2);
        heroArrayList.add(hero3);

        // 4.创建标题行
        HSSFRow titleRow = hssfSheet.createRow(0);
        String[] strings = {"id","姓名","生日"};
        for(int i = 0; i < strings.length; i++){
            titleRow.createCell(i).setCellValue(strings[i]);
        }

        // 5.创建填充内容
        for (int i = 0; i < heroArrayList.size(); i++){
            HSSFRow row = hssfSheet.createRow(i + 1);
            row.createCell(0).setCellValue(heroArrayList.get(i).getId());
            row.createCell(1).setCellValue(heroArrayList.get(i).getName());
            //row.createCell(2).setCellValue(heroArrayList.get(i).getBir());
            HSSFCell hssfCell = row.createCell(2);
            hssfCell.setCellStyle(hssfCellStyle);
            hssfCell.setCellValue(heroArrayList.get(i).getBir());
        }

        // 6.将内容输出
        hssfWorkbook.write(new FileOutputStream(new File("d:/poiOutput2Test.xls")));


    }

运行结果:
在这里插入图片描述

五、POI导入

 // poi导出
    // 测试
    // 运行单元测试
    // ok
    @Test
    public void poiInputTest() throws Exception{

        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(new FileInputStream(new File("d:/poiOutput2Test.xls")));
        HSSFSheet hssfSheet = hssfWorkbook.getSheet("英雄名单");
        int lastRowNum = hssfSheet.getLastRowNum();
        for (int i = 1 ; i <= lastRowNum; i++){
            HSSFRow row = hssfSheet.getRow(i);
            HSSFCell id = row.getCell(0);
            HSSFCell name = row.getCell(1);
            HSSFCell bir = row.getCell(2);
            Hero hero = new Hero();
            hero.setId(id.toString());
            hero.setName(name.getStringCellValue());
            hero.setBir(bir.getDateCellValue());
            System.out.println(hero);
           /**
            Hero(id=1, name=李白, bir=Mon Jan 20 00:29:24 CST 2020)
            Hero(id=2, name=韩信, bir=Mon Jan 20 00:29:24 CST 2020)
            Hero(id=3, name=马克菠萝, bir=Mon Jan 20 00:29:24 CST 2020)
            */
        }

    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值