官网地址:EasyPOI
以下是常见的指令:
以下就是模板常用的指令:
三目运算 {{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& 空格
&INDEX& 表示循环中的序号,自动添加
]] 换行符 多行遍历导出
sum: 统计数据
cal: 基础的±X% 计算
dict: 字典
i18n: 国际化
{{}}: 表达式里面的数据取值
easypoi不会改变excel原有的样式,如果是遍历,easypoi会根据模板的那一行样式进行复制
————————————————
版权声明:本文为CSDN博主「大胖东」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42583263/article/details/124732187
1、先设置模板导出Excel模板:
2、为方便整理统一写到controller里
/**
* 导出理论题试题列表
*/
@PostMapping("/export")
public void export(HttpServletResponse response, DevelopSearchReqVo reqVo) throws IOException, URISyntaxException {
Map<String, Object> total = new HashMap<>();
List<Map<String, Object>> mapList = new ArrayList<>();
List<DevelopOption> userList = developService.exportDevelopOptionList(reqVo);
for (DevelopOption developOption : userList) {
Map<String, Object> map = new HashMap<>();
//切割<P>标签
String str = "https://127.0.0.1/file/download/other/2023/05/24/a544e06a-6778-4c87-9afb-f947e6785dc3.jpg";
// 插入图片
ImageEntity image = new ImageEntity();
//设置高度和宽度
image.setHeight(1500);
image.setWidth(100);
//放入url地址
image.setUrl(str);
map.put("上面第一张图片对应的字段",image);
mapList.add(map);
}
total.put("mapList",mapList);
exportExcel(total, "模板名称", "模板名称", "模板位置例:export", response);
}
3、模板导出(可以直接用):
/**
* 按模板导出Excel数据(支持文件流读取文件)
*
* @param paramsMap 数据
* @param fileName 模板名称
* @param goalName 文件名称
* @param fileTemplateUrl 模板地址
* @return 文件存储地址
* @throws Exception
*/
public String exportExcel(Map<String, Object> paramsMap, String fileName, String goalName, String fileTemplateUrl, HttpServletResponse response) {
String templateFileName = "";
try {
String os = System.getProperty(OS_NAME);
if (os != null && os.toLowerCase().startsWith(STR_WINDOWS)) {
templateFileName = this.getClass().getClassLoader().getResource("").getPath();
// 获取resource目录下的模板位置
templateFileName = templateFileName.substring(1);
templateFileName = templateFileName.replace("/", File.separator);
} else {
templateFileName = filePath;
}
templateFileName = templateFileName + STR_TEMPLATES + File.separator + fileTemplateUrl + File.separator + fileName + ".xlsx";
// 第二个参数true是为了开启多sheet扫描,就是同一个xls文件中有多个工作表的时候。
TemplateExportParams params = new TemplateExportParams(templateFileName, true);
// 数据载入,生成excel文件
Workbook workbook = ExcelExportUtil.exportExcel(params, paramsMap);
//写文件流
response.setCharacterEncoding(STR_UTF8);
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader(STR_CONTEND_DISPOSITION, STR_ATTACHMENT + URLEncoder.encode(goalName + ".xlsx", STR_UTF8));
workbook.write(response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
//"按模板导出Excel数据异常:" + e
return null;
}
return goalName;
}
4、pom文件:
<!-- poi-tl -->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.10.0</version>
</dependency>
<!-- easy-poi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1-jre</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
导出效果: