Controller层代码

@RequestMapping(value = "/productExportExcel", method = RequestMethod.GET)public void productExportExcel(HttpServletRequest request,HttpServletResponse response) throws Exception {Record rd = this.getCurrentUser();try {List<Integer> columnWidthList = new ArrayList<Integer>();//列宽 用list比较方便在某处插入新字段和数数columnWidthList.add(20);columnWidthList.add(20);columnWidthList.add(20);columnWidthList.add(20);columnWidthList.add(20);columnWidthList.add(20);columnWidthList.add(15);String[] title = {"一级产品线","详细描述","二级产品线","详细描述","三级产品线","详细描述"};String[] key = {"NAME","DETAIL","Z_NAME","Z_DETAIL","ZZ_NAME","ZZ_DETAIL"};String fileName = "产品线信息表";exportExcel.productExport(request, response, columnWidthList, title, key, fileName);logService.showLog(fileName, "4",rd,request);} catch (Exception e) {// TODO: handle exceptionlogger.error(e.getMessage());String fileName = "产品线信息表";logService.showLog(fileName, "5",rd,request);}}

Service层代码

public void productExport(HttpServletRequest request,HttpServletResponse response,List<Integer> columnWidthList,String[] title,String[] key,String fileName) throws Exception{/** 1.设置样式*/HSSFWorkbook workbook = new HSSFWorkbook(); HSSFFont titleFont = workbook.createFont(); //属性字体HSSFFont valueFont = workbook.createFont(); //值字体HSSFCellStyle titleStyle = workbook.createCellStyle();//属性格式HSSFCellStyle valueStyle = workbook.createCellStyle();//值格式setStyle(titleFont,valueFont,titleStyle,valueStyle);HSSFSheet sheet = workbook.createSheet(fileName);for (int i = 0; i < columnWidthList.size(); i++) {sheet.setColumnWidth(i,(int) ((columnWidthList.get(i)+0.72)*256));}/** 2.处理查询条件,获取导出数据 */List<Object> param = new ArrayList<Object>();StringBuffer from = new StringBuffer(" FROM pro_product a left join pro_product b on a.code=b.PARENT_CODE and b.STATE='1' LEFT JOIN pro_product c on b.CODE=c.PARENT_CODE and c.STATE='1' ");StringBuffer where = new StringBuffer(" where a.PARENT_CODE='' and a.state='1' ");String sql = "SELECT a.CODE,a.NAME,a.DETAIL,a.PARENT_CODE,b.CODE Z_CODE,b.NAME Z_NAME,b.DETAIL Z_DETAIL,b.PARENT_CODE Z_PARNET_CODE,c.CODE ZZ_CODE,c.NAME ZZ_NAME,c.DETAIL ZZ_DETAIL,c.PARENT_CODE ZZ_PARENT_CODE " + from+where.toString()+" ORDER BY a.sort,b.sort,c.sort ASC";//便于打印 List<Map<String, Object>> list = registerService.findSQL(sql, param.toArray());List<List<Integer>> rowList = new ArrayList<List<Integer>>();//合并行String[] rowKeys = {"NAME","DETAIL","Z_NAME","Z_DETAIL","",""};//需要合并列名,与key对应,不需要合并的列对应的数组位置列名为空字符串即可跳过String[] rowValue = {"NAME","DETAIL","Z_NAME","Z_DETAIL","",""};//for (int i = 0; i < rowKeys.length; i++) {rowList.add(new ArrayList<Integer>());}/** 3.填充数据*/if(list.size()>0){//列名HSSFRow rowTitle = sheet.createRow(0);HSSFCell[] cellTitle = new HSSFCell[title.length];for (int i = 0; i < cellTitle.length; i++) {cellTitle[i] = rowTitle.createCell(i);cellTitle[i].setCellStyle(titleStyle);cellTitle[i].setCellValue(new HSSFRichTextString(title[i]));}HSSFRow[] row = new HSSFRow[list.size()];HSSFCell[][] cell = new HSSFCell[title.length][list.size()];Map<Object,String> typeMap = new HashMap<Object, String>();for (int i = 0; i < list.size(); i++) {/*System.out.println((i+1)+"/"+list.size());*///行row[i] = sheet.createRow(i+1);row[i].setHeight((short) ((30+0.72)*20));Map<String, Object> content = list.get(i);//判断合并内容for (int j = 0; j < rowKeys.length; j++) {if(!"".equals(rowKeys[j])){if(null==content.get(rowKeys[j])){rowList.get(j).add(i);rowValue[j] = "";}else if(!rowValue[j].equals(content.get(rowKeys[j]).toString())){rowList.get(j).add(i);rowValue[j] = content.get(rowKeys[j]).toString();}}}//遍历导出数据for (int j = 0; j < title.length; j++) {//列cell[j][i] = row[i].createCell(j);cell[j][i].setCellStyle(valueStyle);/*String contentValue = "";//特殊数据处理cell[j][i].setCellValue(contentValue);*/String contentValue = "";//特殊数据处理if(null!=content.get((key[j]))){if(key[j].equals("DETAIL")||key[j].equals("Z_DETAIL")||key[j].equals("ZZ_DETAIL")){contentValue = content.get(key[j]).toString().replaceAll("&lt;br&gt;",String.valueOf((char)10));}else{contentValue = content.get(key[j]).toString();}}cell[j][i].setCellValue(contentValue);}}//合并单元格for (int j = 0; j < rowList.size(); j++) {List<Integer> rlist = rowList.get(j);if(rlist.size()>0){if(rlist.get(rlist.size()-1)!=list.size()) rlist.add(list.size());for (int i = 0; i < rlist.size()-1; i++) {sheet.addMergedRegion(new CellRangeAddress(rlist.get(i)+1, rlist.get(i+1),j, j));}}}}fileName += ".xls";response.setContentType("application/octet-stream");response.setHeader("Content-Disposition","attachment;"+ (new StringBuilder("filename=").append(encode(request, fileName)).toString()));response.addHeader("Content-Length", "");ServletOutputStream localServletOutputStream = response.getOutputStream();workbook.write(localServletOutputStream);localServletOutputStream.flush();localServletOutputStream.close();}

设置样式,设置列宽方法

public void setStyle(HSSFFont titleFont,HSSFFont valueFont,HSSFCellStyle titleStyle,HSSFCellStyle valueStyle){//属性字体titleFont.setFontHeightInPoints((short) 11);titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//值字体valueFont.setFontHeightInPoints((short) 10);//属性格式titleStyle.setFont(titleFont);titleStyle.setBorderBottom((short) 1);titleStyle.setBorderLeft((short) 1);titleStyle.setBorderRight((short) 1);titleStyle.setBorderTop((short) 1);titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//值格式valueStyle.setFont(valueFont);valueStyle.setWrapText(true);valueStyle.setBorderBottom((short) 1);valueStyle.setBorderLeft((short) 1);valueStyle.setBorderRight((short) 1);valueStyle.setBorderTop((short) 1);valueStyle.setBottomBorderColor(HSSFColor.BLACK.index);valueStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);valueStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);}

设置编码方法

public String encode(HttpServletRequest request, String fileName)throws UnsupportedEncodingException {Boolean isIE = false;String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"};String userAgent = request.getHeader("User-Agent");userAgent = userAgent == null ? "" : userAgent;for (String signal : IEBrowserSignals) {if (userAgent.contains(signal)){  isIE = true;}}if (isIE) {fileName = java.net.URLEncoder.encode(fileName, "UTF-8");} else {fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");}return fileName;}

前端代码就不发了,就一个导出按钮加一个url带参数,没其他的了

Java导出Excel表合并行、合并列相关推荐

  1. Java导出Excel表

    excel表导出三步骤:引入依赖.代码详解.导出excel后缀 导出样式:自适应列宽,标题.表头.数据 1.首先引入poi依赖 <!-- 导出excel表,引入poi -->        ...

  2. Java 导出excel表 POI

    1.首先下载poi-3.6-20091214.jar,下载地址如下: http://download.csdn.net/detail/evangel_z/3895051 1.建立一个实体类 1 imp ...

  3. java导出数据为乱码_传参导出Excel表乱码问题解决方法

    业务场景 先描述一下业务场景,要实现的功能是通过搜索框填写参数,然后点击按钮搜索数据,将搜索框的查询参数获取,附加在链接后面,调导Excel表接口,然后实现导出Excel功能.其实做导Excel表功能 ...

  4. java 列表数据List通过模板导出excel表和word表

    1.maven需要的jar包 <!-- exl导出 --> <dependency><groupId>net.sf.jxls</groupId>< ...

  5. java 动态导出excel表单 无模板文件下载

    java 动态导出excel表单 无模板文件下载 public ResponseEntity<byte[]> exportStanding(@PathVariable Long signu ...

  6. java 动态导出excel表单 无模板本地生成

    java 动态导出excel表单 无模板本地生成 这里使用的是alibaba的公共类excelWriter,注意在pom文件中要引入easyExcel的依赖 public void exportExc ...

  7. java导出excel设置行高列宽_使用POI生成Excel文件,可以自动调整excel列宽

    //autoSizeColumn()方法自动调整excel列宽 importjava.io.FileOutputStream; importorg.apache.poi.hssf.usermodel. ...

  8. java 导出excel教程_Java导出Excel表格

    Java导出Excel表格 导出Excel表格需要一个poi-3.9.jar的包,该包在网上可以找到. 第一步,创建Excel对象. HSSFWorkbook workbook = new HSSFW ...

  9. java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...

    非异步方法 /** * 使用Java导出Excel表格并由浏览器直接下载--基于POI框架 * * @param response * @return * @throws IllegalAccessE ...

最新文章

  1. 8种Nosql数据库系统对比
  2. java 抛出异常 返回值_java通过抛异常来返回提示信息
  3. 智能车复工日记【N】:图像处理——环岛debug记录(持续更新)
  4. 不动产中心考试计算机测试题,2005年全国计算机二级考试VFP笔试模拟题
  5. bootstrap table通过ajax获取后台数据展示在table
  6. winxp制作服务器,你要知道的WinXP服务器操作系统安装的方法
  7. 机器学习面试问题10
  8. MySQL数据库(五)
  9. 基于GPON的光纤光栅通信网与传感网融合技术研究
  10. 垃圾邮件过滤技术发展现状及展望
  11. 解压ubi文件_IoT(八)ubi文件系统挂载解包
  12. springcloudAlibaba+dubbo线程拥堵Thread pool is EXHAUSTED
  13. Windows 徽标键相关的快捷键
  14. pytorch Vgg网络模型
  15. SQl函数: 1.取整函数
  16. 爬取某知名网站的数据
  17. 【Android】GestureDetector 类的手势操作方法含义
  18. 阿姆斯特朗数 matlab,c中阿姆斯特朗数
  19. 关于小程序如何长按复制长文本的方法(比较简单的一种)
  20. 扬帆开局|香港电讯与国家(深圳·前海)新型互联网交换中心合作项目正式启动

热门文章

  1. python王者归来—学习笔记(3)
  2. 如何发掘孩子的兴趣点
  3. OMNET++学习(Network Node)
  4. Web基础知识之TCP_IP协议
  5. 逻辑回归损失函数求导推导过程
  6. react 分享 跳转 到 其他 应用_不用越狱,苹果iOS12修改应用名称和设置密码的方法...
  7. TDA2030A发热量大的问题及其调试心得
  8. 基于Springboot+vue的茶叶销售商城网站 elementui
  9. 多址复用技术详解——空分复用、频分复用、时分复用、码分复用
  10. 视频基础知识 视频行业专业术语注释