Java导出Excel表合并行、合并列
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("<br>",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表合并行、合并列相关推荐
- Java导出Excel表
excel表导出三步骤:引入依赖.代码详解.导出excel后缀 导出样式:自适应列宽,标题.表头.数据 1.首先引入poi依赖 <!-- 导出excel表,引入poi --> ...
- Java 导出excel表 POI
1.首先下载poi-3.6-20091214.jar,下载地址如下: http://download.csdn.net/detail/evangel_z/3895051 1.建立一个实体类 1 imp ...
- java导出数据为乱码_传参导出Excel表乱码问题解决方法
业务场景 先描述一下业务场景,要实现的功能是通过搜索框填写参数,然后点击按钮搜索数据,将搜索框的查询参数获取,附加在链接后面,调导Excel表接口,然后实现导出Excel功能.其实做导Excel表功能 ...
- java 列表数据List通过模板导出excel表和word表
1.maven需要的jar包 <!-- exl导出 --> <dependency><groupId>net.sf.jxls</groupId>< ...
- java 动态导出excel表单 无模板文件下载
java 动态导出excel表单 无模板文件下载 public ResponseEntity<byte[]> exportStanding(@PathVariable Long signu ...
- java 动态导出excel表单 无模板本地生成
java 动态导出excel表单 无模板本地生成 这里使用的是alibaba的公共类excelWriter,注意在pom文件中要引入easyExcel的依赖 public void exportExc ...
- java导出excel设置行高列宽_使用POI生成Excel文件,可以自动调整excel列宽
//autoSizeColumn()方法自动调整excel列宽 importjava.io.FileOutputStream; importorg.apache.poi.hssf.usermodel. ...
- java 导出excel教程_Java导出Excel表格
Java导出Excel表格 导出Excel表格需要一个poi-3.9.jar的包,该包在网上可以找到. 第一步,创建Excel对象. HSSFWorkbook workbook = new HSSFW ...
- java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...
非异步方法 /** * 使用Java导出Excel表格并由浏览器直接下载--基于POI框架 * * @param response * @return * @throws IllegalAccessE ...
最新文章
- 8种Nosql数据库系统对比
- java 抛出异常 返回值_java通过抛异常来返回提示信息
- 智能车复工日记【N】:图像处理——环岛debug记录(持续更新)
- 不动产中心考试计算机测试题,2005年全国计算机二级考试VFP笔试模拟题
- bootstrap table通过ajax获取后台数据展示在table
- winxp制作服务器,你要知道的WinXP服务器操作系统安装的方法
- 机器学习面试问题10
- MySQL数据库(五)
- 基于GPON的光纤光栅通信网与传感网融合技术研究
- 垃圾邮件过滤技术发展现状及展望
- 解压ubi文件_IoT(八)ubi文件系统挂载解包
- springcloudAlibaba+dubbo线程拥堵Thread pool is EXHAUSTED
- Windows 徽标键相关的快捷键
- pytorch Vgg网络模型
- SQl函数: 1.取整函数
- 爬取某知名网站的数据
- 【Android】GestureDetector 类的手势操作方法含义
- 阿姆斯特朗数 matlab,c中阿姆斯特朗数
- 关于小程序如何长按复制长文本的方法(比较简单的一种)
- 扬帆开局|香港电讯与国家(深圳·前海)新型互联网交换中心合作项目正式启动