导出多样化实现——easypoi 的使用
业务使用场景:用于各种定制化导出 EXCEL,可以将某些只能在 EXCEL 内实现的东西,通过该框架将数据完整置入,满足某些对 EXCEL 有特殊展示的需求。
1. 所需要用到的 jar 包
2. 添加一个 EXCEL 模板,模板内填充好公式,公式格式如下图
3. 获取到上述对应模板 EXCEL 所在的路径(获取路径方式和位置应根据各项目情况调整,此处以项目下 resources/excel_temp 路径为例),定义一个 TemplateExportParams 对象并将路径放入
4. 根据需求定义 sheet 页
5. 将准备好的数据根据上图的模板公式对应打包好放入,同时将数据 sheet 页的两个数据包放入一个 hashmap
6. 数据打包并生成 BOOK 对象,将该对象通过流写入至前台即可完成导入
注意事项:
某些需求下会对该 BOOK 对象解开针对具体的某一行或列或具体单元格进行操作。此时需要用到 POI 框架直接按 sheet 页,然后再细致拆分至某行某列即可
对某一个具体单元格通过 poi 进行定制操作获得自己想要的效果
输出值的时候需要注意,实际值需要进行转换,譬如下图填入数字为 0.8958,从 BOOK 对象解析出来会变成 NUMERIC0.8958,需要进行去除多余字符串
下列即为转换实际值方法,可引用并根据实际情况做适当修改
————————————————————————————————
public String transFormCellValue(Cell cell, String cellValue) {
if (ExcelUtilForProject.NUMERIC.equals(cellValue)) {
cell.setCellValue("");
return "";
}
if (ExcelUtilForProject.DATE.equals(cellValue)) {
cell.setCellValue("");
return "";
}
if (cell != null && com.epichust.mestar.utils.lang.StringUtils.isNotEmpty(cellValue)) {
if (cellValue.startsWith(ExcelUtilForProject.NUMERIC)) {
cellValue = cellValue.replaceFirst(ExcelUtilForProject.NUMERIC, "");
cell.setCellValue(Double.valueOf(cellValue));
} else if (cellValue.startsWith(ExcelUtilForProject.STRING)) {
cellValue = cellValue.replaceFirst(ExcelUtilForProject.STRING, "");
cell.setCellValue(cellValue);
} else if (cellValue.startsWith(ExcelUtilForProject.FORMULA)) {
cellValue = cellValue.replaceFirst(ExcelUtilForProject.FORMULA, "");
cell.setCellFormula(cellValue);
} else if (cellValue.startsWith(ExcelUtilForProject.DATE)) {
try {
cellValue = cellValue.replaceFirst(ExcelUtilForProject.DATE, "");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH🇲🇲ss");
cell.setCellValue(sdf.parse(cellValue));
} catch (ParseException e) {
e.printStackTrace();
// 暂时时间设置错误,直接抛出异常;
// throw new MestarException("解析单元格的时间信息为{"+ cellValue +" }格式>[yyyy-MM-dd
// HH🇲🇲ss]出错,请注意原始数据时间格式是否正确,异常信息+ " + e.getMessage());
// 如果不抛出异常,则设置字符串即可;
cellValue = cellValue.replaceFirst(ExcelUtilForProject.DATE, "");
cell.setCellValue(cellValue);
}
}
}
return cellValue != null ? cellValue.toString() : "";
}
————————————————————————————————————多样化导出实现.pptx