java--Excel操作工具——POI

Posted 雾晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java--Excel操作工具——POI相关的知识,希望对你有一定的参考价值。

引言

在web应用开发中,Excel报表是一种最常见的报表需求。Excel报表开发一般分为两种形式: 为了方便操作,基于Excel的报表批量上传数据 通过java代码生成Excel报表

Java中常见的用来操作Excl的方式一般有2种:JXL和POI。

JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本。现在已经停止更新和维护。

POI是apache的项目,可对微软的Word,Excel,Ppt进行操作,包括office2003和2007,Excl2003和2007。poi现在 一直有更新。所以现在主流使用POI。

Apache POI是Apache软件基金会的开源项目,由Java编写的免费开源的跨平台的 Java API,Apache POI提供API 给Java语言操作Microsoft Office的功能。

POl应用场景

  1. 数据报表生成
  2. 数据备份
  3. 数据批量上传

搭建环境

<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.0.1</version>
    </dependency>
</dependencies>

结构说明

HSSF提供读写Microsoft Excel XLS格式档案的功能。

XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能

HWPF提供读写Microsoft Word DOC格式档案的功能。

HSLF提供读写Microsoft PowerPoint格式档案的功能。

HDGF提供读Microsoft Visio格式档案的功能。

HPBF提供读Microsoft Publisher格式档案的功能。

HSMF提供读Microsoft Outlook格式档案的功能。

创建Excel

1、创建工作簿和表
public class PoiTest01 {
    public static void main(String[] args) throws IOException {
        //1、创建工作簿
        Workbook workbook=new XSSFWorkbook();  //XSSF --2003
        // 这个Workbook接口有很多个实现,我们根据要创建不同版本的excel,来选择不同的实现类

        //创建表 sheet
        workbook.createSheet("test");

        //文件流
        FileOutputStream pis=new FileOutputStream("F:\\\\Spring全家桶\\\\中间件\\\\POL操作excel\\\\zx\\\\src\\\\main\\\\resources\\\\excel\\\\text.xlsx");


        //写入文件
        workbook.write(pis);
        pis.close();

    }
}

效果

2、向单元格中写入一个字符串
public class PoiTest01 {
    public static void main(String[] args) throws IOException {
        //1、创建工作簿
        Workbook workbook=new XSSFWorkbook();  //XSSF --2003
        // 这个Workbook接口有很多个实现,我们根据要创建不同版本的excel,来选择不同的实现类

        //创建表单 sheet
        Sheet sheet=workbook.createSheet("test");

        //创建 行对象 参数 索引 从0开始
        Row row=sheet.createRow(2);

        //创建单元格对象也是从0开始
        Cell cell=row.createCell(2);
        //向单元格写入数据
        cell.setCellValue("摘星带妹稳赢");
        
        
        //文件流
        FileOutputStream pis=new FileOutputStream("F:\\\\Spring全家桶\\\\中间件\\\\POL操作excel\\\\zx\\\\src\\\\main\\\\resources\\\\excel\\\\text.xlsx");

        //写入文件
        workbook.write(pis);
        pis.close();

    }
}

预览效果图
在这里插入图片描述

3、设置单元格样式
/**
 * 单元格样式处理
 */
public class PoiTest02 {

    public static void main(String[] args) throws IOException {
        //1、创建工作簿
        Workbook workbook=new XSSFWorkbook();  //XSSF --2003

        //创建表单 sheet
        Sheet sheet=workbook.createSheet("test");

        //创建 行对象 参数 索引 从0开始
        Row row=sheet.createRow(2);

        //创建单元格对象也是从0开始
        Cell cell=row.createCell(2);

        //向单元格写入数据
        cell.setCellValue("摘星带妹稳赢");

        //创建样式对象
        CellStyle style=workbook.createCellStyle();

        style.setBorderTop(BorderStyle.THIN); //设置上边框
        style.setBorderBottom(BorderStyle.THIN);//设置下边框

        //创建字体对象
        Font font=workbook.createFont();
        font.setFontName("华文行楷"); //设置字体
        font.setFontHeightInPoints((short) 28); //设置字号

        //放入样式对象里面
        style.setFont(font);

        //行高和列宽
        row.setHeightInPoints(50); //行高
        sheet.setColumnWidth(2,31*256); //列宽 在这里其实是指字符宽度

        // 设置居中显示
        style.setAlignment(HorizontalAlignment.CENTER); //水平居中


        //添加样式到单元格
        cell.setCellStyle(style);


        //文件流
        FileOutputStream pis=new FileOutputStream("F:\\\\Spring全家桶\\\\中间件\\\\POL操作excel\\\\zx\\\\src\\\\main\\\\resources\\\\excel\\\\text2.xlsx");

        //写入文件
        workbook.write(pis);

        pis.close();

    }
}

在这里插入图片描述

4、向excel添加一个图片
public static void main(String[] args) throws IOException {
    //1、创建工作簿
    Workbook workbook=new XSSFWorkbook();  //XSSF --2003

    //创建表单 sheet
    Sheet sheet=workbook.createSheet("test");

    //创建 行对象 参数 索引 从0开始
    Row row=sheet.createRow(2);


    //创建单元格对象也是从0开始
    Cell cell=row.createCell(2);

    //向单元格写入数据
    cell.setCellValue("摘星带妹稳赢");

    //读取图片流
    FileInputStream stream=new FileInputStream("F:\\\\Spring全家桶\\\\中间件\\\\POL操作excel\\\\zx\\\\src\\\\main\\\\resources\\\\1.jpg");

    //将图片转换为二进制数组
    byte[] bytes=IOUtils.toByteArray(stream);
    stream.read(bytes);
    //向Poi内存中添加一张图片 返回图片在图片集合中的索引
    int index=workbook.addPicture(bytes,Workbook.PICTURE_TYPE_JPEG);

    //绘制图片工具类
    CreationHelper creationHelper = workbook.getCreationHelper();
    //通过图片工具类 创建一个绘图对象
    Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();

    //创建锚点,设置图片坐标
    ClientAnchor anchor = creationHelper.createClientAnchor();

    anchor.setRow1(0);
    anchor.setCol1(0);

    //绘制图片
    Picture picture=drawingPatriarch.createPicture(anchor,index); //图片位置 图片索引
    picture.resize(); //自适应渲染图片


    //文件流
    FileOutputStream pis=new FileOutputStream("F:\\\\Spring全家桶\\\\中间件\\\\POL操作excel\\\\zx\\\\src\\\\main\\\\resources\\\\excel\\\\text3.xlsx");

    //写入文件
    workbook.write(pis);

    pis.close();

}

效果图预览
在这里插入图片描述

上面的内容都是创建excel的部分,下一步我会出解析excel文档的教程,好吧,再见

以上是关于java--Excel操作工具——POI的主要内容,如果未能解决你的问题,请参考以下文章

java excel导出(POI)

Java Excel导出方法(POI或jxl)

Apache POI - Java Excel APIs

Java excel poi

java excel两种操作方式

java excel poi 大数据量50W 内存溢出