1、环境搭建及说明
1.1、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格式档案的功能。
1.2、poi的maven坐标
<!--poi start -->
<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>
<!--poi end -->
1.3、poi的API说明
API名称 | 说明 |
Workbook | Excel文档对象,针对不同的excel类型分为HSSFWorkbook(2003)和XSSFWorkbool(2007) |
Sheet | excel的表单 |
Row | excel中的行 |
Cell | excel中单元格 |
Font | excel字体 |
CellStyle | 单元格样式 |
2.2、POI导出基本操作
2.1、创建Excel
/**
* 创建Excel
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//1.创建workbook工作簿
Workbook wb=new XSSFWorkbook();
//2.创建表单sheet
Sheet sheet = wb.createSheet("mysheet");
//3.文件流
FileOutputStream fos=new FileOutputStream("d:\\test.xlsx");
//4.文件写入
wb.write(fos);
fos.close();
}
2.2、创建单元格
/**
*场景Excel
* @param args
*/
public static void main(String[] args) throws Exception {
//1.创建workbook工作簿
Workbook wb=new XSSFWorkbook();
//2.创建表达sheet
Sheet sheet=wb.createSheet("mysheet1");
// 3.创建行对象,从0开始
Row row=sheet.createRow(3); //第四行
// 4.创建单元格,从0开始
Cell cell=row.createCell(2);//第3列
//5.单元格写入数据
cell.setCellValue("河南万庄");
FileOutputStream fos=new FileOutputStream("d:\\test2.xlsx");
//6.文件写入
wb.write(fos);
fos.close();
}
2.3、设置单元格式
/**
* 设置格式
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//1.创建workbook工作簿
Workbook wb=new XSSFWorkbook();
//2.创建表达sheet
Sheet sheet=wb.createSheet("mysheet1");
// 3.创建行对象,从0开始
Row row=sheet.createRow(2);
// 4.创建单元格,从0开始
Cell cell=row.createCell(2);
//5.单元格写入数据
cell.setCellValue("中国南京");
//6.创建单元格样式对象
CellStyle style=wb.createCellStyle();
//6.1设置边框
style.setBorderBottom(BorderStyle.DASH_DOT);//下边框
style.setBorderTop(BorderStyle.THIN);//上边框
style.setBorderLeft(BorderStyle.THIN);//左边框
style.setBorderRight(BorderStyle.THIN);//右边框
//6.2设置字体
Font font=wb.createFont(); //创建字体对象
font.setFontName("华文行楷");//设置字体名
font.setFontHeightInPoints((short)28);//设置字体大小
style.setFont(font);
//6.3设置宽度
sheet.setColumnWidth(2,31*256);//设置第3列的宽度是31个字符宽度
row.setHeightInPoints(50);//设置行的高度是50点
//6.4设置居中显示
style.setAlignment(HorizontalAlignment.CENTER);//水平居中
style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
//6.5 设置单元格样式
cell.setCellStyle(style);
//6.6 合并单元格
// CellRangeAddress参数: firstRow表示第几行开始合并,lastRow表示第几行结束合并,
// CellRangeAddress参数:firstCol从第几列开始合并,lastCol从第几列结束合并
CellRangeAddress region =new CellRangeAddress(3, 4, 4, 6);
sheet.addMergedRegion(region);
FileOutputStream fos=new FileOutputStream("d:\\test3.xlsx");
//8.文件写入
wb.write(fos);
fos.close();
}
2.4、excel中绘图
/**
* excel中绘制图片
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//1.创建workbook工作簿
Workbook wb=new XSSFWorkbook();
//2.创建表单sheet
Sheet sheet = wb.createSheet("mysheet");
//3.处理图片
//3.1 读取图片流
FileInputStream fis=new FileInputStream("D:\\logo.png");
//3.2 转化二进制数组,IOUtils是POI包提供的
byte[] bytes = IOUtils.toByteArray(fis);
fis.read();
//3.3.向POI内存中添加一张图片,返回图片在图片集合中的索引
int index = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);//参数一:图片的二进制数据,参数二:图片类型
//3.4.绘制图片工具类
CreationHelper helper = wb.getCreationHelper();
//3.5创建一个绘图对象
Drawing<?> patriarch = sheet.createDrawingPatriarch();
//3.6设置图片的坐标
ClientAnchor anchor = helper.createClientAnchor();
anchor.setRow1(0);//图片从第几行开始
anchor.setCol1(0);//图片从第几列开始
//3.7绘制图片
Picture picture = patriarch.createPicture(anchor, index);//参数1:图片位置 参数2:图片索引
picture.resize();//渲染图片,自适应图片
//4.文件流
FileOutputStream fos=new FileOutputStream("d:\\test5.xlsx");
//5.文件写入
wb.write(fos);
fos.close();
}