EasyPoi教程和使用案例

编程

EasyPoi教程和使用案例

 

先上文档:http://easypoi.mydoc.io/

 

基于Apache poi 开发的EasyPoi,比起poi更加简单易用,但是功能没有poi强大,。

 

特性总结:

优点:

  1. 通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法。推荐使用注解功能。
  2. 支持Excel导入与导出,同时支持xls和xlsm,即07版本和03版本(官方建议03版本不要超过2000行)的Excel文件格式。
  3. 支持pojo注释时,映射成为java实体模型。

缺点:

  1. 多表头导出最多支持2层表头;(导出复杂表头建议用easyExcel)

  1. easypoi的解析方式是dom解析,把结果一次都读入内存操作,这样的操作平时是不会有问题的,但是并发量上来的时候就会出现OOM

 

 

此处推荐一个别人造好的轮子【easypoi】:

 

       <dependency>

<groupId>cn.afterturn</groupId>

<artifactId>easypoi-base</artifactId>

<version>3.0.3</version>

</dependency>

<dependency>

<groupId>cn.afterturn</groupId>

<artifactId>easypoi-web</artifactId>

<version>3.0.3</version>

</dependency>

<dependency>

<groupId>cn.afterturn</groupId>

<artifactId>easypoi-annotation</artifactId>

<version>3.0.3</version>

</dependency>

 

编写实体类

此处注意必须要有空构造函数,否则会报错“对象创建错误” 关于注解@Excel,其他还有@ExcelCollection,@ExcelEntity ,@ExcelIgnore,@ExcelTarget等,此处我们用不到,可以去官方查看更多

属性

类型

类型

说明

name

String

null

列名

needMerge

boolean

fasle

纵向合并单元格

orderNum

String

"0"

列的排序,支持name_id

replace

String[]

{}

值得替换 导出是{a_id,b_id} 导入反过来

savePath

String

"upload"

导入文件保存路径

type

int

1

导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本

width

double

10

列宽

height

double

10

列高,后期打算统一使用@ExcelTarget的height,这个会被废弃,注意

isStatistics

boolean

fasle

自动统计数据,在追加一行统计,把所有数据都和输出这个处理会吞没异常,请注意这一点

isHyperlink

boolean

false

超链接,如果是需要实现接口返回对象

isImportField

boolean

true

校验字段,看看这个字段是不是导入的Excel中有,如果没有说明是错误的Excel,读取失败,支持name_id

exportFormat

String

""

导出的时间格式,以这个是否为空来判断是否需要格式化日期

importFormat

String

""

导入的时间格式,以这个是否为空来判断是否需要格式化日期

format

String

""

时间格式,相当于同时设置了exportFormat 和 importFormat

databaseFormat

String

"yyyyMMddHHmmss"

导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数据库格式,用以转换时间格式输出

numFormat

String

""

数字格式化,参数是Pattern,使用的对象是DecimalFormat

imageType

int

1

导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的

suffix

String

""

文字后缀,如% 90 变成90%

isWrap

boolean

true

是否换行 即支持

mergeRely

int[]

{}

合并单元格依赖关系,比如第二列合并是基于第一列 则{1}就可以了

mergeVertical

boolean

fasle

纵向合并内容相同的单元格

 

import cn.afterturn.easypoi.excel.annotation.Excel;

import java.util.Date;

public class Person {

@Excel(name = "姓名", orderNum = "0")

private String name;

@Excel(name = "性别", replace = {"男_1", "女_2"}, orderNum = "1")

private String sex;

@Excel(name = "生日", exportFormat = "yyyy-MM-dd", orderNum = "2")

private Date birthday;

public Person(String name, String sex, Date birthday) {

this.name = name;

this.sex = sex;

this.birthday = birthday;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public Date getBirthday() {

return birthday;

}

public void setBirthday(Date birthday) {

this.birthday = birthday;

}

}

导入导出公用方法:

public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName,boolean isCreateHeader, HttpServletResponse response){

ExportParams exportParams = new ExportParams(title, sheetName);

exportParams.setCreateHeadRows(isCreateHeader);

defaultExport(list, pojoClass, fileName, response, exportParams);

}

public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, HttpServletResponse response){

defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));

}

public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response){

defaultExport(list, fileName, response);

}

private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) {

Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);

if (workbook != null);

downLoadExcel(fileName, response, workbook);

}

private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {

try {

response.setCharacterEncoding("UTF-8");

response.setHeader("content-Type", "application/vnd.ms-excel");

response.setHeader("Content-Disposition",

"attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

workbook.write(response.getOutputStream());

} catch (IOException e) {

throw new NormalException(e.getMessage());

}

}

private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {

Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);

if (workbook != null);

downLoadExcel(fileName, response, workbook);

}

public static <T> List<T> importExcel(String filePath,Integer titleRows,Integer headerRows, Class<T> pojoClass){

if (StringUtils.isBlank(filePath)){

return null;

}

ImportParams params = new ImportParams();

params.setTitleRows(titleRows);

params.setHeadRows(headerRows);

List<T> list = null;

try {

list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);

}catch (NoSuchElementException e){

throw new NormalException("模板不能为空");

} catch (Exception e) {

e.printStackTrace();

throw new NormalException(e.getMessage());

}

return list;

}

public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){

if (file == null){

return null;

}

ImportParams params = new ImportParams();

params.setTitleRows(titleRows);

params.setHeadRows(headerRows);

List<T> list = null;

try {

list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);

}catch (NoSuchElementException e){

throw new NormalException("excel文件不能为空");

} catch (Exception e) {

throw new NormalException(e.getMessage());

}

return list;

}

测试:

  @RequestMapping("export")

public void export(HttpServletResponse response){

//模拟从数据库获取需要导出的数据

List<Person> personList = new ArrayList<>();

Person person1 = new Person("路飞","1",new Date());

Person person2 = new Person("娜美","2", DateUtils.addDate(new Date(),3));

Person person3 = new Person("索隆","1", DateUtils.addDate(new Date(),10));

Person person4 = new Person("小狸猫","1", DateUtils.addDate(new Date(),-10));

personList.add(person1);

personList.add(person2);

personList.add(person3);

personList.add(person4);

//导出操作

FileUtil.exportExcel(personList,"花名册","草帽一伙",Person.class,"海贼王.xls",response);

}

@RequestMapping("importExcel")

public void importExcel(){

String filePath = "F:\海贼王.xls";

//解析excel,

List<Person> personList = FileUtil.importExcel(filePath,1,1,Person.class);

//也可以使用MultipartFile,使用 FileUtil.importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass)导入

System.out.println("导入数据一共【"+personList.size()+"】行");

//TODO 保存数据库

}

 

以上是 EasyPoi教程和使用案例 的全部内容, 来源链接: utcz.com/z/510775.html

回到顶部