POI简介
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。
用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)
结构:
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格式档案的功能。
Demo示例
1.导入pom.xml依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>
2. 测试类
package com.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
public class POIDemo {
public static void main(String[] args) throws Exception {
//api可以上网找
// https://www.cnblogs.com/mh-study/p/9754692.html
// http://poi.apache.org/apidocs/4.0/
//demo1();
// demo2();
}
/**
* 建简单excel
* @throws Exception
*/
public static void demo1()throws Exception{
HSSFWorkbook wk = new HSSFWorkbook();//创建excel工作簿
HSSFSheet sheet = wk.createSheet("我的工作表");//创建一个工作表
HSSFRow row = sheet.createRow(0);//创建第一行
HSSFCell cell = row.createCell(0);//创建第一个单元格
cell.setCellValue("测试");//单元格内设置值
//保存文件到本地目录
wk.write(new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\test.xls")));
wk.close();//关闭工作簿
}
/**
* 建复杂excel
* @throws Exception
*/
public static void demo2()throws Exception{
HSSFWorkbook wk = new HSSFWorkbook();
HSSFSheet sheet = wk.createSheet("采购订单");// 工作表
// 内容样式
HSSFCellStyle style = wk.createCellStyle();
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
//内容部分对其设置
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
//内容部分字体
HSSFFont font = wk.createFont();//创建字体
font.setFontName("宋体");//设置字体名称
font.setFontHeightInPoints((short) 11);//设置字体大小
style.setFont(font);//设置样式的字体
//日期格式,如果有单元格使用style_date set进去即可
HSSFCellStyle style_date = wk.createCellStyle();
style_date.cloneStyleFrom(style);
HSSFDataFormat dataFormat = wk.createDataFormat();
style_date.setDataFormat(dataFormat.getFormat("yyyy-MM-dd hh:mm"));
// 创建10行4列
for(int i = 2; i < 12; i++){//第二行开始
HSSFRow row = sheet.createRow(i);//创建行
for(int j = 0; j < 4; j++){
HSSFCell cell = row.createCell(j);//创建订单元格
cell.setCellStyle(style);//设置单元格的样式
}
}
//合并单元格
sheet.addMergedRegion(new CellRangeAddress(0,0,0,3));//合并第0行到第0行 , 第0列到第3列
sheet.addMergedRegion(new CellRangeAddress(2,2,1,3));
sheet.addMergedRegion(new CellRangeAddress(7,7,0,3));
//设置行高列宽
sheet.createRow(0);
sheet.getRow(0).setHeight((short) 1000);//设置行高,第一行高1000
sheet.setColumnWidth(0, 5000);//设置列宽,第1列设置列宽5000
//保存文件到本地目录
wk.write(new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\test.xls")));
wk.close();//关闭工作簿
}
/**
* 读取excel
* @throws Exception
*/
public void doImport(InputStream is)throws Exception{
HSSFWorkbook wb = new HSSFWorkbook(is);//创建excel文件
HSSFSheet sheet = wb.getSheetAt(0);//获取第一个工作表
String sheetName = sheet.getSheetName();//获取工作表表名
int lastRowNum = sheet.getLastRowNum();//获取最后一行行号
HSSFRow row = sheet.getRow(0);//获取第一行
HSSFCell cell = row.getCell(0);//用第一行获取第一个单元格
String value = cell.getStringCellValue();//获取单元格内的值
}
}