热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

poi导出带复杂表头的内容

Poi导出带复杂表头的内容目录Poi导出带复杂表头的内容代码:ContrllerService:导出类:PoiExcelExporter测

Poi 导出带复杂表头的内容

目录

Poi 导出带复杂表头的内容

代码:

Contrller

Service:

导出类:PoiExcelExporter

测试用postman:

结果:

总结:



有时候遇到要导出复杂的表头

 

手动拼接复杂表头是难点之一

 

 

重要的引入:

maven 在pom.xml中引入;

    

org.apache.poipoi3.15
org.apache.poipoi-ooxml3.15

 

   gradle 在build.gradle:  

compile 'org.apache.poi:poi:3.15',compile 'org.apache.poi:poi-ooxml:3.15'

 


代码:


Contrller

@RestController
@RequestMapping("/excel")
public class ExcelController {@Resourceprivate ExcelService excelService;@GetMapping("/exportOrder")@ApiOperation(value="导出数据接口")public void exportOrder(HttpServletResponse response) {excelService.exportOrder(response);}
}

 


Service:

@Service
public class ExcelService {@Resourceprivate PoiExcelExporter poiExcelExporter;public void exportOrder(HttpServletResponse response) {String tableName = "order " + LocalDate.now().getYear() + "-" + LocalDate.now().getMonthValue() + "-"+ LocalDate.now().getDayOfMonth();// 获取需要导出的数据List> dataList = getResultData();// 需要展示的列List fieldList = Lists.newArrayList("orderTime","total","except","overTime","timelyRate");// 匹配数据List> results = matchFieldData(dataList, fieldList);// 设置表头List> titleList = setTableTitle();// 设置表头合并List cellRangeAddressList = addMergeOrder();try {poiExcelExporter.exportMulTitle(tableName, titleList, results, cellRangeAddressList, response);} catch (Exception e) {e.printStackTrace();}}private List> getResultData(){String data = "[{\"orderTime\":\"2021-03-03 10:10:10\",\"total\":55,\"except\":12,\"overTime\":8,\"timelyRate\":\"88%\",\"successRate\":\"77\"},{\"orderTime\":\"2021-03-03 10:15:10\",\"total\":155,\"except\":44,\"overTime\":20,\"timelyRate\":\"78%\",\"successRate\":\"65\"},{\"orderTime\":\"2021-03-03 10:20:10\",\"total\":85,\"except\":6,\"overTime\":5,\"timelyRate\":\"98%\",\"successRate\":\"97\"}]";return GsonUtils.changeJsonToList(data);}private List> setTableTitle(){List> titleList = new ArrayList<>();List titleOne= Lists.newArrayList("统计","","","","");List titleTwo = Lists.newArrayList("日期","综合","","","");List titleThree = Lists.newArrayList("","订单总量","异常量","超时量","及时率");titleList.add(titleOne);titleList.add(titleTwo);titleList.add(titleThree);return titleList;}private List addMergeOrder() {List cellRangeAddressList = new ArrayList<>();cellRangeAddressList.add(new CellRangeAddress(0, 0, 0, 4));cellRangeAddressList.add(new CellRangeAddress(1, 1, 1, 4));cellRangeAddressList.add(new CellRangeAddress(1, 2, 0, 0));return cellRangeAddressList;}private List> matchFieldData(List> dataList, List fieldList) {return ListUtils.emptyIfNull(dataList).stream().filter(Objects::nonNull).map(e -> ListUtils.emptyIfNull(fieldList).stream().map(f -> MapUtils.getString(e, f)).collect(Collectors.toList())).collect(Collectors.toList());}}

GsonUtils 引用 看字符串转化为list

 


导出类:PoiExcelExporter

@Component
public class PoiExcelExporter {private static Logger LOGGER = LoggerFactory.getLogger(PoiExcelExporter.class);public void exportMulTitle(String tableName, List> titleList, List> contentList,List cellRangeAddressList, HttpServletResponse response) {LOGGER.info("------------excel export start-----------");try (HSSFWorkbook wb = new HSSFWorkbook(); OutputStream output = response.getOutputStream()) {// 行号 一行一行添加int rowNum = 0;CellStyle style = createTitleCellStyle(wb);HSSFSheet hssfSheet = wb.createSheet("sheet1");// 先处理标题头for (List title : ListUtils.emptyIfNull(titleList)) {setSheetTitle(hssfSheet, title, style, rowNum);rowNum++;System.out.println("title rowNum " + rowNum);}// 再处理 cellRangeAddressListif(CollectionUtils.isNotEmpty(cellRangeAddressList)){cellRangeAddressList.forEach(hssfSheet::addMergedRegion);}if (CollectionUtils.isNotEmpty(contentList)) {// 再处理内容for (List content : ListUtils.emptyIfNull(contentList)) {setSheetContent(hssfSheet, content, rowNum);rowNum++;System.out.println("content rowNum " + rowNum);}LOGGER.info("------------excel export complied-----------");}setResponseExcel(response, tableName);wb.write(output);output.flush();} catch (Exception e) {LOGGER.error("export wrong: ", e);throw new RuntimeException(e);}}private static void setSheetTitle(HSSFSheet sheet, List titleList, CellStyle style, int rownum) {HSSFRow row = sheet.createRow(rownum);AtomicInteger i = new AtomicInteger();for (String title : ListUtils.emptyIfNull(titleList)) {HSSFCell cell = row.createCell(i.getAndIncrement());cell.setCellValue(title);cell.setCellStyle(style);}}private static void setSheetContent(HSSFSheet sheet, List titleList, int rownum) {HSSFRow row = sheet.createRow(rownum);AtomicInteger i = new AtomicInteger();for (String title : ListUtils.emptyIfNull(titleList)) {HSSFCell cell = row.createCell(i.getAndIncrement());cell.setCellValue(title);}}private static CellStyle createTitleCellStyle(HSSFWorkbook wb) {CellStyle style = wb.createCellStyle();Font fOnt= wb.createFont();font.setBold(true);//粗体显示style.setFont(font);//单元格样式cell1.setCellStyle(style);//给cell1这个单元格设置样式style.setFont(font);style.setAlignment(HorizontalAlignment.CENTER); // 居中return style;}private static void setResponseExcel(HttpServletResponse response, String tableName)throws UnsupportedEncodingException {//获取输出流response.reset();//设置响应的编码response.setContentType("application/x-download");//下面三行是关键代码,处理乱码问题response.setCharacterEncoding("utf-8");//设置浏览器响应头对应的Content-dispositionString fileName = URLEncoder.encode(tableName, "UTF-8");response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");}}

 


测试用postman:

 


结果:

 


总结:

    导出带复杂表头的时候,重点是如何拼接复杂的表头。导出的时候,先处理表题,再进行合并,然后处理具体的数据。 多表头需要这样处理, 简单表头呢?

   知道了导出,如何读取呢?    如何读取本地文件excel

 


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
author-avatar
newphper
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有