⑴ EasyPoi的导入和导出功能
EasyPoi是一款开源的软件,用于开发EXCEL表格的导入和导出功能,简单易上手,代码量也很少,非常适合初学者去使用。我们使用Java开发Excel导入导出功能,以前常用的是Poi,但是需要编写的代码量太多,使用EasyPoi仅需要在代码中添加注解,便可以完成大部分普通的Excel编辑工作。
工具/材料
IntelliJ IDEA
我们是使用Maven管理项目,首先我们需要添加开发EasyPoi所依赖的jar包,如下所示。
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.1.0</version>
</dependency>
EasyPoi 可以自适应Excel的xls和xlsx两种格式,我们今天主要讲解使用注解进行导入和导出的功能,我们只要修改注解就可以修改Excel的字段和格式。我们需要编写实体和Excel表格的对应关系,在实体上添加注解。@Excel 注解作用到filed(列)上面,是对列的描述。@Excel注解的name属性即为列名,format用于设置时间的格式。我们创建一个PersonEntity,实现序列化接口,并添加如下的注解,另外该类需要getter和setter方法。
我们写一个测试类去测试导出功能,创建一个测试类,并在main方法中编写测试代码,我们使用easypoi工具类ExcelExportUtil 的exportExcel方法,其中new ExportParams()是标题和sheet的基本设置,当然这些设置有些不是必须的,可以根据需要自行修改。具体的导出代码如下图所示。
接下来我们右键执行该方法,此时会生成一个excel文件,如下图所示,我们可以看到设置的标题和数据已存在该excel表格中。
接下来我们编写导入的方法,将上面生成的excel表格导入,使用ExcelImportUtil工具类的importExcel方法,ImportParams用于设置导入参数。
接下来我们测试导入功能,在执行方法后提示创建对象异常,我们需要检查异常的原因,此时发现我们上面创建的实体类没有无参构造方法,因为我们已经创建了一个有参的构造,就不会帮我们自动创建无参构造了,因此我们需要手动创建,如下图所示。
另外,我们在编写PersonEntity实体类时,步骤2的id字段上面没有@Excel注解,所以该字段不起任何作用,若不需要的话可以删除。
特别提示
EasyPoi注解作用的实体类一定要有无参构造,若实体类中存在有参构造,一定要手动创建一个无参构造。
⑵ normalexcelconstants导出怎么设置底部
之前使用poi导出Excel表格,需要配置很多东西,也比较麻烦,这里使用poi的封装easypoi,可以快速配置,实现Excel或者word文件的导出。这里我们结合SpringMVC开发easypoi。
导入jar包
这里是springMVC和easypoi所需的jar包
主要是easypoi-base和easypoi-web,其它都是关联所需的jar包,我们需要commons-lang3.jar包,开始使用commons-lang2.6版本会出现错误。
spring-servlet.xml配置
[html] view plain
<!-- Bean解析器,级别高于默认解析器,寻找bean对象进行二次处理 -->
<bean id="beanNameViewResolver"
class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0">
</bean>
[html] view plain
<!-- Excel 处理 根据用户输入进行对象处理 -->
<bean id="jeecgExcelView" class="org.jeecgframework.poi.excel.view.JeecgSingleExcelView" />
<bean id="jeecgTemplateExcelView" class="org.jeecgframework.poi.excel.view.JeecgTemplateExcelView" />
<bean id="jeecgTemplateWordView" class="org.jeecgframework.poi.excel.view.JeecgTemplateWordView" />
<bean id="jeecgMapExcelView" class="org.jeecgframework.poi.excel.view.JeecgMapExcelView" />
controller
[java] view plain
package com.mvc.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.entity.vo.MapExcelConstants;
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(value="/excel")
public class ExcelController {
/**
*
* 方法名:
* 开发者:
* 开发时间:2016-12-29
*/
@RequestMapping(value = "/export",method = {RequestMethod.POST,RequestMethod.GET})
public String export(HttpServletRequest request,HttpServletResponse response,ModelMap modelMap){
//标题
List<ExcelExportEntity> entityList = new ArrayList<ExcelExportEntity>();
//内容
List<Map<String,Object>> dataResult = new ArrayList<Map<String,Object>>();
entityList.add(new ExcelExportEntity("表头1", "table1", 15));
entityList.add(new ExcelExportEntity("表头2", "table2", 25));
entityList.add(new ExcelExportEntity("表头3", "table3", 35));
for (int i = 0; i < 10; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("table1", "苹果"+i);
map.put("table2", "香蕉"+i);
map.put("table3", "鸭梨"+i);
dataResult.add(map);
}
modelMap.put(MapExcelConstants.ENTITY_LIST, entityList);
modelMap.put(MapExcelConstants.MAP_LIST, dataResult);
String fileName = "easypoi测试列表";
modelMap.put(MapExcelConstants.FILE_NAME, fileName);
modelMap.put(NormalExcelConstants.PARAMS, new ExportParams("easypoi列表", "测试列表"));
return MapExcelConstants.JEECG_MAP_EXCEL_VIEW;
}
}
配置好表头,内容体,文件名就可以使用了
⑶ 【急】easypoi模板导出合并问题:合并后的第一行数据始终无法显示不完整,请各位大神帮忙看下,非常感谢
你的代码中使用了List的嵌套,但是excel模板中却只使用了一层循环。所以你要么把代码中的TogetherDiagnosisVO和DiagnosisDetailVO的字段合并,要么模板按照循环嵌套的方式写。
⑷ cmw500和iqxel-80wifi测试一致吗
EasyPoi的主要特点
1.设计精巧,使用简单
2.接口丰富,扩展简单
3.默认值多,write less do more
4.AbstractView 支持,web导出可以简单明了
EasyPoi的几个入口工具类
1.ExcelExportUtil Excel导出(普通导出,模板导出)
2.ExcelImportUtil Excel导入
3.WordExportUtil Word导出(只支持docx ,doc版本poi存在图片的bug,暂不支持)
版本修改
2.0.6-SNAPSHOT
增加map的导出
增加index 列
EasyPoi导出实例
1.注解,导入导出都是基于注解的,实体上做上注解,标示导出对象,同时可以做一些操作
@ExcelTarget("courseEntity")
public class CourseEntity implements java.io.Serializable {
/** 主键 */
private String id;
/** 课程名称 */
@Excel(name = "课程名称", orderNum = "1", needMerge = true)
private String name;
/** 老师主键 */
@ExcelEntity(id = "yuwen")
@ExcelVerify()
private TeacherEntity teacher;
/** 老师主键 */
@ExcelEntity(id = "shuxue")
private TeacherEntity shuxueteacher;
@ExcelCollection(name = "选课学生", orderNum = "4")
private List<StudentEntity> students;
2.基础导出 传入导出参数,导出对象,以及对象列表即可完成导出
HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams(
"2412312", "测试", "测试"), CourseEntity.class, list);
3.基础导出,带有索引 在到处参数设置一个值,就可以在导出列增加索引
ExportParams params = new ExportParams("2412312", "测试", "测试");
params.setAddIndex(true);
HSSFWorkbook workbook = ExcelExportUtil.exportExcel(params,
TeacherEntity.class, telist);
4.导出Map 创建类似注解的集合,即可完成Map的导出,略有麻烦
List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
entity.add(new ExcelExportEntity("姓名", "name"));
entity.add(new ExcelExportEntity("性别", "sex"));
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map;
for (int i = 0; i < 10; i++) {
map = new HashMap<String, String>();
map.put("name", "1" + i);
map.put("sex", "2" + i);
list.add(map);
}
HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams(
"测试", "测试"), entity, list);
5.模板导出 根据模板配置,完成对应导出
TemplateExportParams params = new TemplateExportParams();
params.setHeadingRows(2);
params.setHeadingStartRow(2);
Map<String,Object> map = new HashMap<String, Object>();
map.put("year", "2013");
map.put("sunCourses", list.size());
Map<String,Object> obj = new HashMap<String, Object>();
map.put("obj", obj);
obj.put("name", list.size());
params.setTemplateUrl("org/jeecgframework/poi/excel/doc/exportTemp.xls");
Workbook book = ExcelExportUtil.exportExcel(params, CourseEntity.class, list,
map);
6.导入 设置导入参数,传入文件或者流,即可获得相应的list
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(2);
//params.setSheetNum(9);
params.setNeedSave(true);
long start = new Date().getTime();
List<CourseEntity> list = ExcelImportUtil.importExcel(new File(
"d:/tt.xls"), CourseEntity.class, params);
7.和spring mvc的无缝融合 简单几句话,Excel导出搞定
@RequestMapping(params = "exportXls")
public String exportXls(CourseEntity course,HttpServletRequest request,HttpServletResponse response
, DataGrid dataGrid,ModelMap map) {
CriteriaQuery cq = new CriteriaQuery(CourseEntity.class, dataGrid);
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, course, request.getParameterMap());
List<CourseEntity> courses = this.courseService.getListByCriteriaQuery(cq,false);
map.put(NormalExcelConstants.FILE_NAME,"用户信息");
map.put(NormalExcelConstants.CLASS,CourseEntity.class);
map.put(NormalExcelConstants.PARAMS,new ExportParams("课程列表", "导出人:Jeecg",
"导出信息"));
map.put(NormalExcelConstants.DATA_LIST,courses);
return NormalExcelConstants.JEECG_EXCEL_VIEW;
}
⑸ easypoi 简单模板导出
1.依赖
如果项目有原始poi 依赖 可以使用以下兼容版本
<properties>
<poi.version>3.15</poi.version>
<easypoi.version>3.3.0</easypoi.version>
</properties>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>${easypoi.version}</version>
</dependency>
如果项目没有引入poi 依赖 可以直接用下面依赖
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
2.导出方法
public static void excel() {
Map total =new HashMap<>();
List> mapList =new ArrayList<>();
for (int i =1; i <=5; i++) {
Map map =new HashMap<>();
map.put("id", i +"");
/* map.put("bin", "001 1000千克");
map.put("name", "商品" + i);
map.put("code", "goods" + i);
map.put("proDate", "2019-05-30");
map.put("recvDate", "2019-07-07");*/
mapList.add(map);
}
total.put("list", mapList);
total.put("code","code9527");
TemplateExportParams params =new TemplateExportParams("export/" +"test4.xlsx",true);
try {
Workbook workbook = ExcelExportUtil.exportExcel(params, total);
// CellRangeAddress cra = new CellRangeAddress(1, 3, 0, 0);
// workbook.getSheetAt(0).addMergedRegion(cra);
FileOutputStream fileOutputStream =new FileOutputStream("F:\\project\\工时系统资料" + File.separator +"1.xls");
workbook.write(fileOutputStream);
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
3.模板
位置在resources 创建export文件夹里面放要导出的模板
简单模板(单行遍历)
复杂模板多行遍历(有单元格合并情况)
效果图
复杂模板2
效果图
注意点 模板指令可以参考官方文档
空格分割
三目运算 {{test ? obj:obj2}}
n: 表示 这个cell是数值类型 {{n:}}
le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
fn: 格式化数字 {{fn:(obj;###.00)}}
fe: 遍历数据,创建row
!fe: 遍历数据不创建row
$fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
#fe: 横向遍历
v_fe: 横向遍历值
!if: 删除当前列 {{!if:(test)}}
单引号表示常量值 '' 比如'1' 那么输出的就是 1
&NULL& 空格
]] 换行符 多行遍历导出
sum: 统计数据
如果在表格表头下面空一行在填写循环的指令 导出的数据也会空一行在填充数据
如果需要做统计的信息 如果循环次数可以确定 可以在下面合适行添加统计的信息如果循环次数不确定可以在表格表头下面做统计信息展示
获取导出数据中code 值 可以在模板合适单元格位置直接 {{code}} 即可
⑹ normalexcelconstants导出怎么过滤掉头部
之前使用poi导出Excel表格,需要配置很多东西,也比较麻烦,这里使用poi的封装easypoi,可以快速配置,实现Excel或者word文件的导出。这里我们结合SpringMVC开发easypoi。导入jar包这里是springMVC和easypoi所需的jar包主要是easypoi-base和easypoi-web,其它都是关联所需的jar包,我们需要commons-lang3.jar包,开始使用commons-lang2.6版本会出现错误。spring-servlet.xml配置[html]viewplain[html]viewplaincontroller[java]viewplainpackagecom.mvc.controller;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.jeecgframework.poi.excel.entity.ExportParams;importorg.jeecgframework.poi.excel.entity.params.ExcelExportEntity;importorg.jeecgframework.poi.excel.entity.vo.MapExcelConstants;importorg.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;importorg.springframework.stereotype.Controller;importorg.springframework.ui.ModelMap;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping(value="/excel")publicclassExcelController{/****方法名:*开发者:*开发时间:2016-12-29*/@RequestMapping(value="/export",method={RequestMethod.POST,RequestMethod.GET})publicStringexport(HttpServletRequestrequest,HttpServletResponseresponse,ModelMapmodelMap){//标题ListentityList=newArrayList();//内容List>dataResult=newArrayList>();entityList.add(newExcelExportEntity("表头1","table1",15));entityList.add(newExcelExportEntity("表头2","table2",25));entityList.add(newExcelExportEntity("表头3","table3",35));for(inti=0;imap=newHashMap();map.put("table1","苹果"+i);map.put("table2","香蕉"+i);map.put("table3","鸭梨"+i);dataResult.add(map);}modelMap.put(MapExcelConstants.ENTITY_LIST,entityList);modelMap.put(MapExcelConstants.MAP_LIST,dataResult);StringfileName="easypoi测试列表";modelMap.put(MapExcelConstants.FILE_NAME,fileName);modelMap.put(NormalExcelConstants.PARAMS,newExportParams("easypoi列表","测试列表"));returnMapExcelConstants.JEECG_MAP_EXCEL_VIEW;}}配置好表头,内容体,文件名就可以使用了