若您正在使用easypoi进行excel导出的话,希望这篇文章能帮到您。
该文章是使用easypoi得模版方式实现excel导出(目前是单sheet的导出),
若需要使用非模版形式导出多sheet得话,可以参考我的文章EasyPOI->非模版形式导出Excel(多Sheet)。
如需使用模版形式导出多sheet,可参考我的文章:EasyPOI->模版形式导出Excel(多Sheet)
如需要导出图片到excel可参考我的文章: Easypoi模版形式导出excel导出图片
直接导出单sheet代码具体参考如下:
首先加入easypoi得依赖:
<!-- easypoi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.2.0</version>
</dependency>
之后就可以书写代码啦,代码如下:
@Controller
@RequestMapping(value = "exportexcel")
public class ExportExcelTest {
@RequestMapping(value="exportexceltest")
@ResponseBody
public String exportExcelTest(HttpServletResponse response){
// 获取workbook对象
Workbook workbook = exportSheetByTemplate() ;
// 判断数据
if(workbook == null) {
return "fail";
}
// 设置excel的文件名称
String excelName = "测试excel" ;
// 重置响应对象
response.reset();
// 当前日期,用于导出文件名称
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateStr = "["+excelName+"-"+sdf.format(new Date())+"]";
// 指定下载的文件名--设置响应头
response.setHeader("Content-Disposition", "attachment;filename=" +dateStr+".xls");
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 写出数据输出流到页面
try {
OutputStream output = response.getOutputStream();
BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);
workbook.write(bufferedOutPut);
bufferedOutPut.flush();
bufferedOutPut.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
/**
* 模版单sheet导出示例
* @return
*/
public Workbook exportSheetByTemplate(){
// 查询数据,此处省略
List<EasyPOIModel> list = new ArrayList<EasyPOIModel>();
int count1 = 0 ;
EasyPOIModel easyPOIModel11 = new EasyPOIModel(String.valueOf(count1++),"信科",new User("张三","男",20)) ;
EasyPOIModel easyPOIModel12 = new EasyPOIModel(String.valueOf(count1++),"生工",new User("李四","男",17)) ;
EasyPOIModel easyPOIModel13 = new EasyPOIModel(String.valueOf(count1++),"化工",new User("淑芬","女",34)) ;
EasyPOIModel easyPOIModel14 = new EasyPOIModel(String.valueOf(count1++),"信科",new User("仲达","男",55)) ;
list.add(easyPOIModel11) ;
easyPOIModel11 = null ;
list.add(easyPOIModel12) ;
easyPOIModel12 = null ;
list.add(easyPOIModel13) ;
easyPOIModel13 = null ;
list.add(easyPOIModel14) ;
easyPOIModel14 = null ;
// 设置导出配置
// 获取导出excel指定模版
TemplateExportParams params = new TemplateExportParams("d:/项目测试文件夹/easypoiExample.xlsx");
// 标题开始行
// params.setHeadingStartRow(0);
// 标题行数
// params.setHeadingRows(2);
// 设置sheetName,若不设置该参数,则使用得原本得sheet名称
params.setSheetName("班级信息");
Map<String,Object> map = new HashMap<String,Object>() ;
map.put("list",list) ;
// 导出excel
return ExcelExportUtil.exportExcel(params, map);
}
}
模版文件格式如下:
模版使用语法如下:
下面列举下EasyPoi支持的指令以及作用,最主要的就是各种fe的用法
- 空格分割
- 三目运算 {{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: 统计数据
使用上述代码导出的文件如下:
上图可以看到数据已经按照模版导出了出来,且sheet得名称由原来得"信息"变更为了"班级信息",这种变更是通过下面这句代码进行设置得
// 设置sheetName,若不设置该参数,则使用得原本得sheet名称
params.setSheetName("班级信息");
若不想改变sheet得名称,则将上面这句代码注释即可,注释后再次导出excel后可以看到如图:
sheet得名称已经变回原本模版中写好得名称。
其他相关使用请参考原文章:https://gitee.com/jeecg/easypoi
如您有其他问题,希望可以通过留言得形式及时交流,有书写错误和可优化的地方也希望及时提出,感谢。