吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1102|回复: 0
收起左侧

[讨论] POI-入门(基于Maven)

[复制链接]
tzforevereer 发表于 2021-7-31 21:11

POI入门操作

1. 搭建环境

<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>

2. POI结构说明

  • 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格式档案的功能。

3. API介绍

API名称 介绍
Workbook Excel的文档对象,针对不同的Excel类型分为:HSSFWorkbook(2003)和XSSFWorkbool(2007)
Sheet Excel的表单
Row Excel的行
Cell Excel的格子单元
Font Excel字体
CellStyle 格子单元样式

4. 基本操作

4.1 创建Excel

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 使用POI创建excel
 */
public class PoiTest01 {
    public static void main(String[] args) throws IOException {

        // 1. 创建工作簿 XSSFWorkbook 2003      xss 2007
        Workbook wb = new XSSFWorkbook();
        // 2. 创建表单sheet
        wb.createSheet("test");
        // 3. 文件流
        FileOutputStream pis =new FileOutputStream("C:\\Users\\asus\\Desktop\\poi\\test.xlsx");
        // 4. 写入文件
        wb.write(pis);
        pis.close();
    }
}

4.2 创建单元格

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;

/**
 * 创建单元格写入内容
 */
public class PoiTest02 {
    public static void main(String[] args) throws IOException {

        // 1. 创建工作簿 XSSFWorkbook 2003      xss 2007
        Workbook wb = new XSSFWorkbook();
        // 2. 创建表单sheet
        Sheet sheet = wb.createSheet("test");
        // 创建行对象 参数: 索引(从0开始)
        Row row = sheet.createRow(2);
        // 创建单元格对象
        Cell cell = row.createCell(2);
        // 向单元格中写入内容
        // 3. 文件流
        cell.setCellValue("tian");
        FileOutputStream pis =new FileOutputStream("C:\\Users\\asus\\Desktop\\poi\\test1.xlsx");
        // 4. 写入文件
        wb.write(pis);
        pis.close();
    }
}

4.3 设置格式

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 单元格样式处理
 */
public class PoiTest03 {
    public static void main(String[] args) throws IOException {

        // 1. 创建工作簿 XSSFWorkbook 2003      xss 2007
        Workbook wb = new XSSFWorkbook();
        // 2. 创建表单sheet
        Sheet sheet = wb.createSheet("test");
        // 创建行对象 参数: 索引(从0开始)
        Row row = sheet.createRow(2);
        // 创建单元格对象
        Cell cell = row.createCell(2);
        // 向单元格中写入内容
        // 3. 文件流
        cell.setCellValue("tian");

        // 样式处理
        // 创建样式对象
        CellStyle cellStyle = wb.createCellStyle();
        cellStyle.setBorderTop(BorderStyle.THIN);// 上边框
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);

        // 创建字体对象
        Font font = wb.createFont();
        font.setFontName("华文行楷"); // 字体
        font.setFontHeightInPoints((short)28); // 字号
        cellStyle.setFont(font);
        // 行高和列宽
        row.setHeightInPoints(50);// 行高
        sheet.setColumnWidth(2,31*256);//列宽   列宽的宽度为字符的宽度
        // 居中显示
        cellStyle.setAlignment(HorizontalAlignment.CENTER);  // 水平居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中

        // 向单元格设置样式
        cell.setCellStyle(cellStyle);
        FileOutputStream pis =new FileOutputStream("C:\\Users\\asus\\Desktop\\poi\\test2.xlsx");
        // 4. 写入文件
        wb.write(pis);
        pis.close();
    }
}

4.4 绘制图形

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 插入图片
 */
public class PoiTest04 {
    public static void main(String[] args) throws IOException {

        // 1. 创建工作簿 XSSFWorkbook 2003      xss 2007
        Workbook wb = new XSSFWorkbook();
        // 2. 创建表单sheet
        Sheet sheet = wb.createSheet("test");

        // 读取图片流
        FileInputStream stream = new FileInputStream("C:\\Users\\asus\\Desktop\\poi\\fenxi.jpg");
        // 图片转换为二进制数组
        byte[] bytes = IOUtils.toByteArray(stream);
        stream.read(bytes);
        // 向poi内存中添加一张图片,返回图片在图片集合中的索引
        int index = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);// 参数一: 图片的二进制数据,参数二: 图片类型
        // 绘制图片工具类
        CreationHelper creationHelper = wb.getCreationHelper();
        // 创建一个绘图对象
        Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
        // 创建锚点,设置图片坐标
        ClientAnchor clientAnchor = creationHelper.createClientAnchor();
        clientAnchor.setRow1(0);// 从第几行开始
        clientAnchor.setCol1(0);// 第几个单元格

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

        FileOutputStream pis =new FileOutputStream("C:\\Users\\asus\\Desktop\\poi\\test3.xlsx");
        // 4. 写入文件
        wb.write(pis);
        pis.close();
    }
}

4.5 加载读取Excel

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.IOException;

/**
 * 读取excel并解析
 */
public class PoiTest05 {

    public static void main(String[] args) throws IOException {
        // 1.根据Excel文件创建工作簿
        Workbook wb = new XSSFWorkbook("C:\\Users\\asus\\Desktop\\poi\\demo.xlsx");

        // 2. 获取Sheet
        Sheet sheet = wb.getSheetAt(0);// 参数, 索引

        // 3. 获取Sheet中的每一行,和每一个单元格中的内容
        for (int rowNum = 0; rowNum<=sheet.getLastRowNum();++rowNum) {
            Row row = sheet.getRow(rowNum);// 根据索引拿到每一行
            StringBuilder sb = new StringBuilder();
            for(int cellNum = 2; cellNum<row.getLastCellNum();++cellNum){
                // 根据索引获取每一个单元格
                Cell cell = row.getCell(cellNum);
                // 获取每一个单元格的内容
                Object value = getCellValue(cell);
                sb.append(value).append("-");
                // 
            }
            System.out.println(sb.toString());
        }
    }

    public  static  Object getCellValue(Cell cell){
        // 1. 获取到单元格 的数据类型

        CellType cellType = cell.getCellType();

        // 2. 根据单元格数据类型获取数据
        Object value = null;
        switch (cellType){
            case STRING: // 字符串类型
                value= cell.getStringCellValue();
                break;
            case BOOLEAN:// boolean类型
                value=cell.getBooleanCellValue();
                break;
            case NUMERIC:// 数字类型(包含日期和普通数字)
                // 日期:
                if(DateUtil.isCellDateFormatted(cell)){
                    value = cell.getDateCellValue();
                }else{
                    // 数字
                    value= cell.getNumericCellValue();
                }
                break;
            case FORMULA: // 公式类型
                 value= cell.getCellFormula();
                 break;
            default:
                break;
        }
        return value;
    }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表