本文共 6516 字,大约阅读时间需要 21 分钟。
导出Excel功能实现
Controller逻辑分析
在实际工作中,常需要将数据库中的数据导出为Excel文件。以下是实现导出功能的Controller逻辑说明:
@RequestMapping(value = {"/ledger_fdi_reinvest_rpt_load"}, method = RequestMethod.POST)@ResponseBodypublic void downLoadExcel(Page page, HttpServletRequest request, HttpServletResponse response) throws Exception { page.setPageSize(Integer.MAX_VALUE); page.setPageNo(1); QueryFilter queryFilter = new QueryFilter(); //级联查询目前只支持EQFilter 一级级联 String innerCorpName = request.getParameter("innerCorpName"); if (StringUtils.isNotEmpty(innerCorpName)) { queryFilter.setLikeFilter("innerCorpName", innerCorpName); } String outCorpName = request.getParameter("outCorpName"); if (StringUtils.isNotEmpty(outCorpName)) { queryFilter.setLikeFilter("outCorpName", outCorpName); } String outCnyCde = request.getParameter("outCnyCde"); if (StringUtils.isNotEmpty(outCnyCde)) { queryFilter.setEQFilter("cnyCde.cnyCde", outCnyCde); } String vocCatCde = request.getParameter("vocCatCde"); if (StringUtils.isNotEmpty(vocCatCde)) { queryFilter.setEQFilter("vocCde.vocCatCde.vocCde", vocCatCde); } String outVocCde = request.getParameter("outVocCde"); if (StringUtils.isNotEmpty(outVocCde)) { queryFilter.setEQFilter("vocCde.vocCde", outVocCde); } String rptYear = request.getParameter("rptYear"); if (StringUtils.isNotEmpty(rptYear)) { queryFilter.setEQFilter("rptYear", rptYear); } page.setOrder("desc"); page.setOrderBy("rptYear"); Page pages = this.commonService.findSupportCascade(page, queryFilter.getPropertyFilters(), LedgerFdiReinvestRptTab.class); getdownLoadDatas(pages.getResult(), request, response);}
Excel生成工具类细节
在项目中,为了实现Excel导出功能,我们使用了ExcelUtil工具类。以下是工具类的主要实现逻辑:
public class ExcelUtil { private ExcelUtil() {} public static void exportExcel(String sheetName, String title, int fontHeight, String[] headName, List
功能解释
Controller逻辑:
- 通过
@RequestMapping
定义路由,接收POST请求 - 设置页面大小为最大值,默认显示第一页
- 创建
QueryFilter
对象,用于数据库查询过滤 - 根据请求参数构建级联查询过滤器
- 调用服务层方法获取数据
- 调用
getdownLoadDatas
方法处理数据并导出
Excel工具类:
- 创建新的Excel文件
HSSFWorkbook
- 定义多种样式
HSSFCellStyle
,用于标题、表头和内容区域 - 设置默认列宽和行高
- 创建并添加表头行,使用合并单元格处理
- 根据数据列表生成Excel行,设置单元格值和样式
- 处理不同浏览器的文件名编码问题
- 输出Excel文件到响应流
注意事项:
- IE浏览器对文件名编码的支持有限,需要特殊处理
- 文件名中避免使用特殊字符,确保兼容性
- 数据导出前需确保数据库查询结果正确
以上是完整的导出Excel功能实现逻辑,适用于实际项目中的数据报表导出需求。
转载地址:http://oedzz.baihongyu.com/