1.依赖
代码语言:txt复制<!-- jxls poi -->代码语言:txt复制 <dependency>代码语言:txt复制 <groupId>org.apache.poi</groupId>代码语言:txt复制 <artifactId>poi</artifactId>代码语言:txt复制 <version>3.15</version>代码语言:txt复制 </dependency>代码语言:txt复制 <dependency>代码语言:txt复制 <groupId>org.apache.poi</groupId>代码语言:txt复制 <artifactId>poi-ooxml</artifactId>代码语言:txt复制 <version>3.15</version>代码语言:txt复制 </dependency>代码语言:txt复制 <dependency>代码语言:txt复制 <groupId>org.apache.poi</groupId>代码语言:txt复制 <artifactId>poi-scratchpad</artifactId>代码语言:txt复制 <version>3.15</version>代码语言:txt复制 </dependency>2.model类
代码语言:txt复制import lombok.Data;代码语言:txt复制@Data代码语言:txt复制public class AreaModel {代码语言:txt复制 private Integer no;代码语言:txt复制 private Integer areaCode;代码语言:txt复制 private String areaName;代码语言:txt复制 private Integer level;代码语言:txt复制}3.util类
代码语言:txt复制import net.sf.jxls.transformer.XLSTransformer;代码语言:txt复制import org.apache.poi.ss.usermodel.Workbook;代码语言:txt复制import javax.servlet.http.HttpServletResponse;代码语言:txt复制import java.io.*;代码语言:txt复制import java.net.URLEncoder;代码语言:txt复制import java.util.Map;代码语言:txt复制public class TemplateExcelUtils {代码语言:txt复制 /**代码语言:txt复制 * 根据模板导出数据
* @param fileName
* @param sourcePath resource/template文件夹下路径
* @param beanParams
* @param response
* @throws Exception
*/
public static void downLoadExcel(String fileName,String sourcePath, Map<String, Object> beanParams, HttpServletResponse response)
throws Exception {
try{
OutputStream os = getOutputStream(fileName,response);
//读取模板
InputStream is = TemplateExcelUtils.class.getClassLoader().getResourceAsStream("template/" sourcePath);
XLSTransformer transformer = new XLSTransformer();
//向模板中写入内容
Workbook workbook = transformer.transformXLS(is, beanParams);
//写入成功后转化为输出流
workbook.write(os);
}catch (Exception e){
e.printStackTrace();
throw e;
}
}代码语言:txt复制 /**代码语言:txt复制 * 导出文件时为Writer生成OutputStream.
* @param fileName 文件名
* @param response response
* @return ""
*/
private static OutputStream getOutputStream(String fileName,
HttpServletResponse response) throws Exception {
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf8");
response.setHeader("Content-Disposition", "attachment; filename=" fileName ".xls");
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "max-age=0");
return response.getOutputStream();
} catch (IOException e) {
throw new Exception("导出excel表格失败!", e);
}
}
}4.业务类
代码语言:txt复制@Override代码语言:txt复制 public void exportTemplateProvinceAreaData(HttpServletResponse response){代码语言:txt复制 List<Area> areas = areaMapper.queryProvinceArea(); // 此处是我本地项目的mapper,是为了获取省份数据代码语言:txt复制 List<AreaModel> result = new ArrayList<>();代码语言:txt复制 areas.stream().forEach(area -> {代码语言:txt复制 AreaModel areaModel = new AreaModel();代码语言:txt复制 BeanUtils.copyProperties(area,areaModel);代码语言:txt复制 result.add(areaModel);代码语言:txt复制 });代码语言:txt复制 IntStream.range(0, result.size()).forEach(i -> {代码语言:txt复制 result.get(i).setNo(i 1);代码语言:txt复制 });代码语言:txt复制 try {代码语言:txt复制 Map<String,Object> param = new HashMap<>();代码语言:txt复制 param.put("title","省份数据");代码语言:txt复制 param.put("list",result);代码语言:txt复制 TemplateExcelUtils.downLoadExcel("省份数据","province.xls",param,response);代码语言:txt复制 } catch (Exception e) {代码语言:txt复制 throw new ServiceException(ResultCode.EXPORT_ERROR);代码语言:txt复制 }代码语言:txt复制 }这是我业务层areaMapper.queryProvinceArea();所返回的省份数据
2021042018212275.png
5.controller层
代码语言:txt复制@GetMapping("/exportTemplateData")代码语言:txt复制 public void exportTemplateData(HttpServletResponse response){代码语言:txt复制 areaService.exportTemplateProvinceAreaData(response);代码语言:txt复制 }返回的excel
20210420182436178.png
7.到这里根据模板导出就做好了。上面是一个比较简单的模板,也可以定义复杂结构的模板。
20210421112759665.png
导出的数据。
20210421112950969.png
8.如果用easypoi导出的话
8.1依赖
代码语言:txt复制<!--easy poi excel文件导出-->代码语言:txt复制 <dependency>代码语言:txt复制 <groupId>cn.afterturn</groupId>代码语言:txt复制 <artifactId>easypoi-spring-boot-starter</artifactId>代码语言:txt复制 <version>4.0.0</version>代码语言:txt复制 </dependency>8.2修改实现
代码语言:txt复制private void excelExport(List<TencentMeetingParticipantResultVO> list, MeetingLive meetingLive,代码语言:txt复制 HttpServletResponse response) {代码语言:txt复制 String fileName = "参会成员信息表";代码语言:txt复制 TemplateExportParams param = new TemplateExportParams("templates/canhuixinxi.xlsx", true);代码语言:txt复制 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");代码语言:txt复制 Map<String, Object> data = new HashMap<>();代码语言:txt复制 data.put("title", meetingLive.getName());代码语言:txt复制 data.put("id", meetingLive.getLiveId());代码语言:txt复制 String userName = "";代码语言:txt复制 if(!StringUtils.isEmpty(meetingLive.getCreateUser())){代码语言:txt复制 User user = userMapper.selectById(meetingLive.getCreateUser());代码语言:txt复制 if(user!=null){代码语言:txt复制 userName = user.getFirstName() user.getLastName();代码语言:txt复制 }代码语言:txt复制 }代码语言:txt复制 data.put("user", userName);代码语言:txt复制 data.put("beginTime", format.format(meetingLive.getBeginTime()));代码语言:txt复制 data.put("endTime", format.format(meetingLive.getEndTime()));代码语言:txt复制 data.put("list", list);//导出list集合代码语言:txt复制 try {代码语言:txt复制 Workbook book = ExcelExportUtil.exportExcel(param, data);代码语言:txt复制 //下载方法代码语言:txt复制 export(response, book, fileName);代码语言:txt复制 } catch (Exception e) {代码语言:txt复制 System.out.println("导出模板Excel,失败:" e);代码语言:txt复制 }代码语言:txt复制 }代码语言:txt复制 /**代码语言:txt复制 * export导出请求头设置
*
* @param response
* @param workbook
* @param fileName
* @throws Exception
*/
private static void export(HttpServletResponse response, Workbook workbook, String fileName) throws Exception {
response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-disposition", "attachment; filename=" java.net.URLEncoder.encode(fileName ".xlsx", "UTF-8"));
ServletOutputStream outStream = null;
try {
outStream = response.getOutputStream();
workbook.write(outStream);
} finally {
outStream.close();
}代码语言:txt复制 }8.3修改模版


