工作总结之----动态导出数据到Excel,多sheet页

2024-08-27 10:18

本文主要是介绍工作总结之----动态导出数据到Excel,多sheet页,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/**
     * 导出
     */
    @RequestMapping(value = "/exlMonthlyList")@ResponseBody
    public String exlMonthlyList(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {//选择列名
        String columnName = request.getParameter("columnName");//导出的表头columnName = URLDecoder.decode(URLDecoder.decode(columnName, "UTF-8"), "UTF-8");List<MonthlyCustom> monthlyCustomList = JSONArray.parseArray(columnName, MonthlyCustom.class);//单位
        String unitId = request.getParameter("unitId");//单位分sheet,一个单位一个sheet,空则所有的数据导入一个sheetString unitName = request.getParameter("unitName");
//        //项目类别
//        String projectType = request.getParameter("projectType");
        //导出月份
        String reportMonth = request.getParameter("reportMonth");String reportingType = request.getParameter("reportingType");Map<String, Object> map = new HashMap<String, Object>();map.put("columnName", monthlyCustomList);map.put("unitId", unitId);map.put("unitName", unitName);map.put("reportingType",reportingType);map.put("reportMonth", reportMonth);String filename = reportMonth + "月报汇总表.xls";try {//创建excle表格
            HSSFWorkbook workbook = new HSSFWorkbook();workbook = projectBaseInfoService.exlMonthlyList(workbook, map);response.reset();response.setContentType("application/octet-stream");response.addHeader("Content-Disposition", "attachment;filename="
                    + java.net.URLEncoder.encode(filename, "UTF-8"));OutputStream os = new BufferedOutputStream(response.getOutputStream());workbook.write(os);os.flush();os.close();} catch (Exception e) {logger.error("exlMonthlyList()出错", e);e.printStackTrace();}return null;}
/**
   * 导出
   */
  @Override
  public HSSFWorkbook exlMonthlyList(HSSFWorkbook workbook, Map<String,Object> map) {String  unitId= map.get("unitId")==null?"":map.get("unitId").toString();String unitName =map.get("unitName")==null?"":map.get("unitName").toString();String reportingType = map.get("reportingType")==null?"":map.get("reportingType").toString();String reportMonth = map.get("reportMonth")==null?"":map.get("reportMonth").toString();List <MonthlyCustom>  monthlyCustomList = (List <MonthlyCustom>)map.get("columnName");String [] unitIds=null;String [] unitNames=null;if(!"".equals(unitId)){unitIds = unitId.split(",");}if(!"".equals(unitName)){unitNames = unitName.split(",");}// 生成一个样式
      HSSFCellStyle style = workbook.createCellStyle();// 设置这些样式
      style.setFillForegroundColor(HSSFColor.WHITE.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 生成一个字体
      HSSFFont font = workbook.createFont();font.setFontHeightInPoints((short) 9);font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 把字体应用到当前的样式
      style.setFont(font);// 生成并设置另一个样式
      HSSFCellStyle style2 = workbook.createCellStyle();style2.setFillForegroundColor(HSSFColor.WHITE.index);style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);style2.setBorderRight(HSSFCellStyle.BORDER_THIN);style2.setBorderTop(HSSFCellStyle.BORDER_THIN);style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);style2.setWrapText(true);// 生成并设置另一个样式
      HSSFCellStyle style3 = workbook.createCellStyle();style3.setFillForegroundColor(HSSFColor.WHITE.index);style3.setAlignment(HSSFCellStyle.ALIGN_LEFT);style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 生成另一个字体
      HSSFFont font3 = workbook.createFont();font3.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);font3.setFontName("楷体");font3.setFontHeightInPoints((short) 12);style3.setFont(font3);// 生成另一个字体
      HSSFFont font2 = workbook.createFont();font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);// 把字体应用到当前的样式
      style2.setFont(font2);HSSFSheet sheet;HSSFRow firstHeaderRow;HSSFRow secondHeaderRow;HSSFRow thirdHeaderRow;HSSFCell yearCell;HSSFCellStyle titleStyle;HSSFFont titleFont;HSSFRow row;HSSFCell cell;List dateList;//合并单元格
      int maxLength;if( unitIds!=null && unitIds.length>0) {maxLength =(monthlyCustomList==null?0:monthlyCustomList.size())+2;//生成各个单位的表格
          for (int ti = 0; ti < unitIds.length; ti++) {map.put("unitId", unitIds[ti]);map.put("unitName", unitNames[ti]);dateList = projectInfoDao.querymonthlyList(map);// 生成一个表格  sheet名称  汇总数据
              sheet = workbook.createSheet(unitNames[ti] + "月报汇总");// 设置表格默认列宽度为15个字节
              sheet.setDefaultColumnWidth((short) 15);//生成title
              firstHeaderRow = sheet.createRow(0);// 第一行
              secondHeaderRow = sheet.createRow(1);// 第二行
              thirdHeaderRow = sheet.createRow(2);// 第三行
              //合并单元格
              sheet.addMergedRegion(new CellRangeAddress(0, 2, 0, maxLength-1));yearCell = firstHeaderRow.createCell(0);yearCell.setCellValue(reportMonth + "月报汇总表");titleStyle = workbook.createCellStyle();titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);titleFont = workbook.createFont();titleFont.setFontHeightInPoints((short) 16);titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);titleFont.setFontName("楷体");titleStyle.setFont(titleFont);yearCell.setCellStyle(titleStyle);//循环遍历列名
              HSSFCellStyle style5 = workbook.createCellStyle();style5.setFillForegroundColor(HSSFColor.WHITE.index);style5.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style5.setBorderBottom(HSSFCellStyle.BORDER_THIN);style5.setBorderLeft(HSSFCellStyle.BORDER_THIN);style5.setBorderRight(HSSFCellStyle.BORDER_THIN);style5.setBorderTop(HSSFCellStyle.BORDER_THIN);style5.setAlignment(HSSFCellStyle.ALIGN_LEFT);row = sheet.createRow(3);for (int i = 0; i < maxLength; i++) {//i是headers的索引,n是Excel的索引
                  HSSFCell cell1 = row.createCell(i);cell1.setCellStyle(style);sheet.setColumnWidth(i, 10000);HSSFRichTextString text = null;if (i == 0) {sheet.setColumnWidth(0,1500);text = new HSSFRichTextString("序号");}else if(i == 1){sheet.setColumnWidth(1,10000);text = new HSSFRichTextString("项目名称");}else {MonthlyCustom mc = monthlyCustomList.get(i - 2);text = new HSSFRichTextString(mc.getColumnName());}cell1.setCellValue(text);}for(int j = 0;j<maxLength;j++){HSSFCell cell1 = row.getCell(j);if("项目状态".equals(cell1.getStringCellValue())){sheet.setColumnWidth(j,3000);}}dateList = projectInfoDao.querymonthlyList(map);// 遍历集合数据,产生数据行
              // 遍历集合数据,产生数据行
              for (int i = 0, index = 4; i < dateList.size(); i++, index++) {row = sheet.createRow(index);Object[] obj = (Object[]) dateList.get(i);for (int x = 0; x < maxLength; x++) {HSSFCell cell1 = row.createCell((short) x);cell1.setCellStyle(style2);HSSFRichTextString richString = null;if (x == 0) {richString = new HSSFRichTextString(String.valueOf(i + 1));}else if(x == 1){cell1.setCellStyle(style5);richString = new HSSFRichTextString(obj[0] == null ? "" : obj[0].toString());} else {cell1.setCellStyle(style5);richString = new HSSFRichTextString(obj[x] == null ? "" : obj[x].toString());}cell1.setCellValue(richString);}}}}else{maxLength =(monthlyCustomList==null?0:monthlyCustomList.size())+3;// 生成一个表格  sheet名称  汇总数据
          sheet = workbook.createSheet("月报汇总");// 设置表格默认列宽度为15个字节
          sheet.setDefaultColumnWidth((short) 15);//生成title
          firstHeaderRow = sheet.createRow(0);// 第一行
          sheet.addMergedRegion(new CellRangeAddress(0, 2, 0, maxLength-1));yearCell = firstHeaderRow.createCell(0);yearCell.setCellValue(reportMonth+"月报汇总表");titleStyle = workbook.createCellStyle();titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);titleFont = workbook.createFont();titleFont.setFontHeightInPoints((short) 16);titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);titleFont.setFontName("楷体");titleStyle.setFont(titleFont);yearCell.setCellStyle(titleStyle);//循环遍历列名
          HSSFCellStyle style4 = workbook.createCellStyle();style4.setFillForegroundColor(HSSFColor.WHITE.index);style4.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style4.setBorderBottom(HSSFCellStyle.BORDER_THIN);style4.setBorderLeft(HSSFCellStyle.BORDER_THIN);style4.setBorderRight(HSSFCellStyle.BORDER_THIN);style4.setBorderTop(HSSFCellStyle.BORDER_THIN);style4.setAlignment(HSSFCellStyle.ALIGN_LEFT);row = sheet.createRow(3);for (int i = 0; i < maxLength; i++) {//i是headers的索引,n是Excel的索引
              HSSFCell cell1 = row.createCell(i);cell1.setCellStyle(style);//sheet.setColumnWidth(i, 10000);
              HSSFRichTextString text = null;if(i<3){if(i==0){sheet.setColumnWidth(0,1500);text=new HSSFRichTextString("序号");}else if(i==1){sheet.setColumnWidth(1,10000);text=new HSSFRichTextString("项目名称");}else{sheet.setColumnWidth(2,3000);text=new HSSFRichTextString("合作单位");}}else {sheet.setColumnWidth(i,10000);MonthlyCustom mc = monthlyCustomList.get(i - 3);text = new HSSFRichTextString(mc.getColumnName());}cell1.setCellValue(text);}for(int j = 0;j<maxLength;j++){HSSFCell cell1 = row.getCell(j);if("项目状态".equals(cell1.getStringCellValue())){sheet.setColumnWidth(j,3000);}}dateList = projectInfoDao.querymonthlyList(map);// 遍历集合数据,产生数据行
          for (int i = 0, index = 4; i < dateList.size(); i++, index++) {row = sheet.createRow(index);Object [] obj = (Object [])dateList.get(i);for (int x=0;x<maxLength;x++){HSSFCell cell1 = row.createCell((short) x);cell1.setCellStyle(style2);HSSFRichTextString richString=null;if(x==0){richString = new HSSFRichTextString(String.valueOf(i+1));}else if(x == 1){cell1.setCellStyle(style4);richString = new HSSFRichTextString(obj[x-1]==null?"":obj[x-1].toString());}else{richString = new HSSFRichTextString(obj[x-1]==null?"":obj[x-1].toString());}cell1.setCellValue(richString);}}}
return  workbook;}
效果:


这篇关于工作总结之----动态导出数据到Excel,多sheet页的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111387

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.