您的位置:首页 > 其它

POI-入门(Maven)

2020-04-22 08:40 1381 查看

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;
}
}
  • 点赞 3
  • 收藏
  • 分享
  • 文章举报
tzfirevereer 发布了2 篇原创文章 · 获赞 4 · 访问量 75 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: