首页 > 基础资料 博客日记
Java 使用easypoi模板导出复杂表格
2024-09-10 10:00:06基础资料围观146次
Java资料网推荐Java 使用easypoi模板导出复杂表格这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣
Excel模板语法:
空格分割
三目运算 {{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& 空格
]] 换行符 多行遍历导出
sum: 统计数据
第一部分.模板制作
(原模版)
(制作后的模板)
(导出的excel)
模板制作注意点:
1.上述模板相当于两个表格数据,上表格是循环数据,所以要使用{{}}将整个循环的这条数据数据括起来,{{是其实的第一个数据前使用,}}是结尾数据使用,我的数据是横向循环,所以每行数据最后用]]进行结尾换行.
2.如果循环数据中有固定数据,像上表中的正向有功总-反向有功谷这些,要用两个单引号''引用起来,有的excel可能会前面的单引号写了不显示,我这里就是,这时候就需要前面写两个单引号,如:''有功电量'.
3.模板的合并单元格可能会有bug,某个可能没有进行合并,这时候需要进行手动合并单元格了
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
//参数:第一sheet页,初始行,最终行,初始列,最终列
PoiMergeCellUtil.addMergedRegion(book.getSheetAt(0),5,5,8,24);
4.部署到服务器的问题,
模板放到项目路径在本地可以正常读取运行,但是部署到服务器上读取不到,解决方法如下:
4.1 将路径改为系统路径,把模板放到服务器莫格文件夹下
4.2 将项目打成war包
4.3 使用4.0.0以上版本,从别处评论区看的,
TemplateExportParams params = new TemplateExportParams();
Workbook workbook = WorkbookFactory.create(getClass().getClassLoader().getResourceAsStream("xlsx/demo.xls"));
params.setTemplateWb(workbook);
第二部分 前后端代码
1.项目环境:
基于SpringBoot和JDK1.8
2.导入依赖
<!-- EasyPoi依赖 -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.1.0</version>
</dependency>
3.后端代码
/**
* 导出excel
*/
@GetMapping("export")
public void eleCountExport(Long id, HttpServletResponse response) throws IOException {
TemplateExportParams params = new TemplateExportParams("D:\\java\\电费明细表模板.xlsx");
//将文件所需的参数传入workbook
Map<String,Object> map = new HashMap<>();
//这里是查询的数据
map.put("date", day);
map.put("list", resultList);
try {
// 这里URLEncoder.encode可以防止中文乱码
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
String filename = URLEncoder.encode("excel名称", "UTF-8");
String newSheetName = configEleUser.getName();
workbook.setSheetName(0, newSheetName);
String suffix = ".xlsx";
String contentType = "application/vnd.ms-excel";
response.setContentType(contentType);
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + filename + suffix + "; filename=" + filename + suffix);
OutputStream outStream = response.getOutputStream();
workbook.write(outStream);
outStream.flush();
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
4.前端调用
<el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
//方法
handleExport() {
const queryParams = this.queryParams;
this.$confirm('是否确认导出所有数据?', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
return exportEleCountData(queryParams);
}).then(response => {
// 创建一个 URL 以便下载
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', '电费明细单.xlsx');
document.body.appendChild(link);
link.click(); // 触发下载
link.remove(); // 移除链接
}).catch(() => {});
},
//js文件
import request from '@/utils/request'
import axios from 'axios'; // 确保引入了 axios
export function exportEleCountData(query) {
const baseUrl = process.env.VUE_APP_BASE_API
return axios({
url: baseUrl + '/es/ele/eleCount/export',
method: 'get',
params: query,
responseType: 'blob',
headers: { 'Authorization': 'Bearer ' + getToken() }
});
}
文章来源:https://blog.csdn.net/weixin_68575201/article/details/141122374
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: