导出Excel表格
需求:导出Excel表格,为下载模板,提供了有力条件
实现思路:生成动态表单之后,为动态表格进行excel 模板的下载
创建一个controller 控制器(承接我上个博客里的动态表单的部分)
/**
* 导出学生excle表
*/
private ExportExamineService service_excel = ExportExamineService.service;
public void exportStudent(){
Map<String, Object> params = getParamsMap();
//获取表单结构的 具体值
List<formDetailedEntity> list = service.Structure(params);
renderFile(service_excel.export(params,list));
}
service编写 适用于 .xls,创建表格 ,每个单元薄并且铺值
package com.hegao.pdos.xydq.service;
import com.hegao.pdos.admin.service.BaseService;
import com.hegao.pdos.xydq.entity.formDetailedEntity;
import com.jfinal.aop.Before;
import com.jfinal.kit.PathKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.tx.Tx;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 缓存处理
*
* @author OF
* @date 2018年1月25日
*/
@Before(Tx.class)
public class ExportExamineService extends BaseService {
public static ExportExamineService service = new ExportExamineService();
//增加页面 通过随机数 的方式
public boolean addPayment(Map<String, Object> info) {
Record record = new Record();
info.remove("num");
// info.put("num", ToolUtils.getNumId("STR"));
record.setColumns(info);
boolean flag = Db.save("of_payment_record", record);
return flag;
}
/**
* 导出excle表
*/
public File export(Map<String, Object> params, List<formDetailedEntity> list) {
File file = new File(getTitle());
file = saveFile(file, list, params);
return file;
}
private static final String FILEPATH = PathKit.getWebRootPath() + File.separator + "upload" + File.separator;
public static String getTitle() {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String title = FILEPATH + dateFormat.format(date) + "模板.xls";
return title;
}
public static File saveFile(File file, List<formDetailedEntity> list, Map<String, Object> params) {
// 创建工作薄
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
// sheet:一张表的简称
// row:表里的行
// 创建工作薄中的工作表
HSSFSheet hssfSheet = hssfWorkbook.createSheet();
// 创建行
HSSFRow row = hssfSheet.createRow(0);
// 创建单元格,设置表头 创建列
HSSFCell cell = null;
// 初始化索引
int rowIndex = 0;
row = hssfSheet.createRow(rowIndex);
// 得到所有的行 一个record就代表 一行
// 遍历标题
int n = 0;
for (int i = 0; i < list.size(); i++) {
//下一行索引
rowIndex++;
// 在有所有的记录基础之上,便利传入进来的表头,再创建N行
cell = row.createCell(i + n);
if (list.get(i).getDetailedOptionEntity() == null) {
if (!list.get(i).getField_type_id().equals("7")) {
//循环获取名字 如果名字 不为null 就去获取他的名字放进去
cell.setCellValue(list.get(i).getField_name() == null ? "" : list.get(i).getField_name());
}
} else {
//循环获取名字 如果名字 不为null 就去获取他的名字放在第一
//这里涉及到单选 多选 下拉的处理
if (!list.get(i).getField_type_id().equals("7")) {
//循环获取名字 如果名字 不为null 就去获取他的名字放进去
cell.setCellValue(list.get(i).getField_name() == null ? "" : list.get(i).getField_name());
}
}
//如果有下级 但不是子项
if (list.get(i).getFormDetailedEntitie() != null && !list.get(i).getField_type_id().equals("7")) {
for (int j = 0; j < list.get(i).getFormDetailedEntitie().size(); j++) {
//子项为上传视频上传图片的不管
if (!list.get(i).getFormDetailedEntitie().get(j).getField_type_id().equals("5") && !list.get(i).getFormDetailedEntitie().get(j).getField_type_id().equals("6")) {
cell = row.createCell(i + ++n);
//获取有子项的,field_name 工作经历-list 循环
cell.setCellValue(list.get(i).getField_name() + "-" + list.get(i).getFormDetailedEntitie().get(j).getField_name());
}
}
}
//如果有子项的话,去掉父项
if (list.get(i).getField_type_id().equals("7")) {
n--;
for (int j = 0; j < list.get(i).getFormDetailedEntitie().size(); j++) {
//子项为上传视频上传图片的不管
if (!list.get(i).getFormDetailedEntitie().get(j).getField_type_id().equals("5") && !list.get(i).getFormDetailedEntitie().get(j).getField_type_id().equals("6")) {
cell = row.createCell(i + ++n);
//获取有子项的,field_name 工作经历-list 循环
cell.setCellValue(list.get(i).getField_name() + "-" + list.get(i).getFormDetailedEntitie().get(j).getField_name());
}
}
}
}
try {
FileOutputStream fileOutputStreane = new FileOutputStream(file);
hssfWorkbook.write(fileOutputStreane);
fileOutputStreane.flush();
fileOutputStreane.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
}
这里 下拉 多选 导出表格 没有进行明确的规定 这里需要改进,如有明白的大佬请指教一二