导出多样化实现——easypoi 的使用

业务使用场景:用于各种定制化导出 EXCEL,可以将某些只能在 EXCEL 内实现的东西,通过该框架将数据完整置入,满足某些对 EXCEL 有特殊展示的需求。

1. 所需要用到的 jar 包
image.pngimage.png

2. 添加一个 EXCEL 模板,模板内填充好公式,公式格式如下图

image.png

3. 获取到上述对应模板 EXCEL 所在的路径(获取路径方式和位置应根据各项目情况调整,此处以项目下 resources/excel_temp 路径为例),定义一个 TemplateExportParams 对象并将路径放入
image.png
image.png

4. 根据需求定义 sheet 页
image.png

5. 将准备好的数据根据上图的模板公式对应打包好放入,同时将数据 sheet 页的两个数据包放入一个 hashmap
image.png

6. 数据打包并生成 BOOK 对象,将该对象通过流写入至前台即可完成导入
image.png
image.png

注意事项:
某些需求下会对该 BOOK 对象解开针对具体的某一行或列或具体单元格进行操作。此时需要用到 POI 框架直接按 sheet 页,然后再细致拆分至某行某列即可
image.png

对某一个具体单元格通过 poi 进行定制操作获得自己想要的效果

image.png

输出值的时候需要注意,实际值需要进行转换,譬如下图填入数字为 0.8958,从 BOOK 对象解析出来会变成 NUMERIC0.8958,需要进行去除多余字符串
image.png

下列即为转换实际值方法,可引用并根据实际情况做适当修改
————————————————————————————————
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