tzforevereer 发表于 2021-7-31 21:11

POI-入门(基于Maven)

# POI入门操作

## 1. 搭建环境

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

```java
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 创建单元格

```java
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 设置格式

```java
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 绘制图形

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

```java
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());
      }
    }
   
   
    publicstaticObject 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;
    }
}
```
页: [1]
查看完整版本: POI-入门(基于Maven)