POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。官方主页http://poi.apache.org/index.html,API文档http://poi.apache.org/apidocs/index.html.
这个是Excel的导出 https://my.oschina.net/wang520/blog/894276
我们首先看一下Jakarta POI常用的组件:
常用组件
HSSFWorkbook | excel的文档对象 |
HSSFSheet | excel的表单 |
HSSFRow | excel的行 |
HSSFCell | excel的格子单元 |
HSSFFont | excel的字体 |
HSSFDataFormat | 日期格式 |
HSSFHeader | sheet头 |
HSSFFooter | sheet尾 |
基本的操作步骤:
1,用HSSFWorkbook打开或创建
1、用HSSFWorkbook打开或者创建“Excel文件对象”
2、用HSSFWorkbook对象返回或者创建Sheet对象
3、用Sheet对象返回行对象,用行对象得到Cell对象
4、对Cell对象读写。
下面创建一个简单的文件:
//创建HSSFWorkBook(一个excel文件)
HSSFWorkbook wb=new HSSFWorkbook();
//HSSFSheet一个表
HSSFSheet sheet=wb.createSheet("sheet0");
//创建HSSFRow 一行
HSSFRow row=sheet.createRow(0);
//创建一个单元格
HSSFCell cell=row.createCell(0);
//设置单元格的值
cell.setCellValue("单元格中的中文");
//输出excel文件
FileOutputStream output=new FileOutputStream("d:\\work\\workbook.xls");
wb.write(output);
output.flush();
这个文件只有一行,一个单元格。下面我们来扩展一下这个文件,写一个通用的类传入任何list自动生成表格,为了标注excel列的名字。我们来写一个简单的注解类Excel,以后会慢慢的扩展。
/**
* Created by WangShiXiang on 2017/5/3.
* Excel生成的相关注解
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Excel {
String name();
}
注解类主要是注解要生成表格列的名字,接下来写生成excel表格的通用类
/**
* Created by WangShiXiang on 2017/5/6.
* java生成Excel文件
*/
public class ExcelUtil {
/**
*
* @param list 要生成excel对象的list
* @param outputStream 生成文件写入到哪
*/
public static void createExcel(List list, OutputStream outputStream){
//创建HSSFWorkBook(一个excel文件)
HSSFWorkbook workbook=new HSSFWorkbook();
//HSSFSheet一个表
HSSFSheet sheet=workbook.createSheet();
//excel表的行索引
int row=0;
//此时是否设置了表格列的名字
boolean isSetTile=false;
//遍历list
for (Object o:list){
//列的索引
int y=0;
HSSFRow row1=sheet.createRow(row);
HSSFRow row2=sheet.createRow(row+1);
HSSFRow row3=sheet.createRow(row);
//遍历对象的所有属性
for (Field field:o.getClass().getDeclaredFields()){
field.setAccessible(true);
if(!isSetTile){//如果没有设置表格列的名字
//读取注解的值
String propertyName=field.getAnnotation(Excel.class).name();
//设置列的名字
row1.createCell(y).setCellValue(propertyName);
try {
//将list里的第一个对象的值写入excel
String value=field.get(o).toString();
row2.createCell(y).setCellValue(value);
}catch (IllegalArgumentException|IllegalAccessException e){
e.printStackTrace();
}
}else {
try {
String value=field.get(o).toString();
row3.createCell(y).setCellValue(value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
y++;
}
if (!isSetTile){isSetTile=true;row++;}
row++;
}
try {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
}
实体类:
/**
* Created by WangShiXiang on 2017/5/2.
* 用户类
*/
public class User implements Serializable{
@Excel(name = "id")
private Integer id;
@Excel(name = "姓名")
private String username;
@Excel(name="密码")
private String password;
@Excel(name="邮箱")
private String email;
@Excel(name="手机")
private String phone;
//省略了get set方法
}
数据库中的信息:
生成的excel表格:
简单的一个excel表格就生成了。