这里写目录标题

  • 业务背景
  • 前端
  • 后端
  • 导出效果

业务背景

如下图,想将用户选中的记录导出excel,某一列内容导出后需要换行展示

前端

表格勾选框列代码:
注:cid是记录的主键,绑定cid的方法用的公司封装方法,不通用,大家自主替换即可。
其他表格元素就正常写,不再赘述

<td 绑定cid值,width:'2%',checkbox:true," >
<input type="checkbox" name="items" id="items" onclick="setCheckBoxState('cid',this.checked);" >
</td>

操作checkbox的选中状态的方法:

/*** 操作checkbox的选中状态.* @param checkbox_name 需要设置状态的checkbox的名称.* @param state   true:设置为选中状态;false:设置为未选中状态.*/
function setCheckBoxState(checkbox_name, state) {checkbox_name = replaceDollar(checkbox_name);$("input[name="+checkbox_name+"]").each(function(){if($(this).prop("disabled") == false){$(this).prop("checked", state);}});
}

导出excel按钮:

<input  onclick="excelExport();" type="button" value="excel导出">

导出方法:

/** excel导出*/
function  excelExport(){var cids = getCheckBoxData("cid","cid");   //getCheckBoxData方法往下看if(cids==""){whir_alert('请选择记录!',function(){});}else{//这一步调用后端导出方法,谁敢信2022年了我还在用jsp,屑!大家的公司肯定没这么拉吧 window.open('/***/***!excelExport.action?recordIds='+cids);  }
}
/*** 获得checkbox的选中值,如果返回值为空说明没有任何checkbox被选中.* @param checkbox_name checkbox的名称.* @param attr_name   你打算获得的属性值的属性名字,如id、value等属性.* @return 获得的属性值的拼串,多个值之间以英文半角逗号分隔且最后一个逗号被自动去除,如"value1,value2,value3" ,如果返回值为空说明没有任何checkbox被选中.*/
function getCheckBoxData(checkbox_name, attr_name) {checkbox_name = replaceDollar(checkbox_name);var r = "" ;$("input[name='"+checkbox_name+"'][type='checkbox']").each(function(){if($(this).prop("checked")==true ){r = r + $(this).attr(attr_name)+",";}});if(r.indexOf(",")>0){r = r.substring(0, r.length-1);}return r;
}
function replaceDollar(str){if(str.indexOf('$')!=-1) {return str.replace(/\$/m, '\\$');}return str;
}

后端

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;public void excelExport() {//后端代码也很out,总之这段目的就是取到前端传的checkbox的值,然后加到sql筛选条件里String recordIds = request.getParameter("recordIds") == null ? "" : request.getParameter("recordIds");List<String> idList = Arrays.asList(recordIds.split(","));//......把idList作为筛选条件加到原来的列表sql里//得到最终的结果列表:resultList  //注:构建resultList时,就要在需要换行的位置加入 \r\n 元素//开始构建exceltry {//1.在内存中创建一个excel文件HSSFWorkbook hssfWorkbook = new HSSFWorkbook();//2.创建工作簿HSSFSheet sheet = hssfWorkbook.createSheet();// 设置列宽sheet.setColumnWidth(0, 7000);sheet.setColumnWidth(1, 7000);sheet.setColumnWidth(2, 7000);sheet.setColumnWidth(3, 7000);sheet.setColumnWidth(4, 7000);sheet.setColumnWidth(5, 7000);sheet.setColumnWidth(6, 7000);sheet.setColumnWidth(7, 7000);//3.创建标题行HSSFRow titleRow = sheet.createRow(0);titleRow.createCell(0).setCellValue("列名0");titleRow.createCell(1).setCellValue("列名1");titleRow.createCell(2).setCellValue("列名2需要换行展示");titleRow.createCell(3).setCellValue("列名3");titleRow.createCell(4).setCellValue("列名4");titleRow.createCell(5).setCellValue("列名5");titleRow.createCell(6).setCellValue("列名6");titleRow.createCell(7).setCellValue("列名7");//4.遍历数据,创建数据行for (int i = 0; i < resultList.size(); i++) {Object[] objs = (Object[]) resultList.get(i);//获取最后一行的行号int lastRowNum = sheet.getLastRowNum();HSSFRow dataRow = sheet.createRow(lastRowNum + 1);dataRow.createCell(0).setCellValue(objs[0].toString());dataRow.createCell(1).setCellValue(objs[1].toString());//第3列需要换行展示,特殊处理如下:HSSFCell cell2 = dataRow.createCell(2);HSSFCellStyle cellStyle=hssfWorkbook.createCellStyle();cellStyle.setWrapText(true);cell2.setCellStyle(cellStyle);//前提:构建resultList时,就在objs[2]中相应位置加入了 \r\n 元素//HSSFRichTextString会自动识别 \r\n 元素进行换行展示cell2.setCellValue(new HSSFRichTextString(objs[2].toString()));dataRow.createCell(3).setCellValue(objs[3].toString());dataRow.createCell(4).setCellValue(objs[4].toString());dataRow.createCell(5).setCellValue(objs[5].toString());dataRow.createCell(6).setCellValue(objs[6].toString());dataRow.createCell(7).setCellValue(objs[7].toString());}//5.创建文件名String fileName = "excel名称.xls";//6.获取输出流对象response.setContentType("application/vnd.ms-excel;charset=UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));ServletOutputStream outputStream = response.getOutputStream();//7.写出文件,关闭流hssfWorkbook.write(outputStream);outputStream.flush();outputStream.close();} catch (Exception e) {e.printStackTrace();  }
}

导出效果

第三列换行了

PS:保险起见,这种测试数据也打厚码了,应该不影响看效果

【java】列表导出excel(支持单元格内容换行展示)相关推荐

  1. java POI导出excel,合并单元格边框消失

    业务是导出一个报表,要求有一个跨多列的表头,肯定要用到合并单元格,但合并后边框消失.网上的一些解决办法是重写合并单元格方法,但弄清楚原因后,其实没必要. 原来是这样的: 合并后就第一个有边框,其余全成 ...

  2. java SXSSF 导出excel 合并单元格,设置打印分页

    官方poi地址: Busy Developers' Guide to HSSF and XSSF Features HSSFWorkbook.XSSFWorkbook.SXSSFWorkbook的区别 ...

  3. vue 导出excel,支持单元格合并,背景色,列宽,字体大小等

    npm下载 npm i xlsx.full.min npm i xlsx-style 关键代码如下 downloadExl(data, name, datab) {const wopts = {boo ...

  4. java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...

    java中导出excel设置单元格的样式为数字格式怎么设置 如果是使用poi,它会自动根据参数值设置单元格为恰当格式,只需传入数字类型参数值即可,比如 double value=....; cell. ...

  5. springboot项目导出excel 合并单元格表格

    springboot项目导出excel 合并单元格表格 导出效果 业务controller 业务数据 业务实体类 注解MyExcel.java 注解 MyExcels 导出工具类MyExcelUtil ...

  6. 导出excel此单元格中的数字为文本格式,或者其前面有撇号

    前言: 无论大家使用的是java,js,.net等技术导出excel,都会出现下面的问题. 这篇文章只提供解决思路,以及用easyexcel导出 的处理方式,其他技术大家可以举一反三. 1.导出exc ...

  7. C# 使用 NPOI 处理Excel导入单元格内容是公式问题

    C# 使用 NPOI 处理Excel导入单元格内容是公式问题 引言:今天在处理业务的时候,碰到导入Excel数据不成功的问题,那么就在这里做下笔记吧. 首先,我们有以下的数据.整块业务逻辑的代码在最后 ...

  8. Java POI 对Excel合并单元格的数据处理

    Java POI 对Excel合并单元格的数据处理 最近在项目开发过程中,有个一个导入Excel文件处理合并单元格数据的需求,就自己在网上找了一个模板,自己进行二次开发来开发需求. Excel工具类 ...

  9. POI导出Excel设置单元格背景色

    POI导出Excel设置单元格背景色 导出Excel的时候,没有设置背景色,用2003版本的Excel工具打开会出现文档单元格背景自动填充黑色的情况,没有找到好的解决方法,就主动给他填充一种颜色,问题 ...

  10. 用EasyPoi导出Excel中单元格图片(线上阿里云)

    用EasyPoi导出Excel中单元格图片(线上阿里云): 导出数据需要包含图片 问题描述 提示:这里描述项目中遇到的问题: 数据库中存储图片格式是阿里云(oss)的图片url,导出excel显示图片 ...

最新文章

  1. 北京大学,签约这个省份!
  2. 企业网络推广浅析网站首页什么样的布局有利于优化?
  3. python多线程爬虫数据顺序_多线程爬取小说时如何保证章节的顺序
  4. xml web service
  5. Briage桥接设计模式
  6. 将数据传入重定向网页
  7. Marketing Cloud里使用了哪个版本的UI5 Odata模型?
  8. emqx使用webhook数据持久化到mysql
  9. 2017.8.7 GT考试 思考记录
  10. ubuntu下安装subversion客户端:
  11. autolayout中 top layout guide详解
  12. MJRefresh自定义刷新动画
  13. liunx 监控工具sar
  14. php匹配ubb,php创建属于自己的UBB代码
  15. Oracle查询执行计划
  16. 确定有限自动机DFA
  17. Win10使用GPT格式为大硬盘分区(2.2T 以上)
  18. win10打开视频显示服务器运行失败,apache启动失败,详细教您快速解决Win10系统apache启动失败...
  19. 我非英雄,广目无双,我本坏蛋,无限嚣张
  20. 华为云计算IE面试笔记-简述Fusion Storage主要模块MDC,OSD,VBS,FSA及FSM的功能定位及交互关系

热门文章

  1. 利用python进行微信好友数据分析
  2. Fabric CA 用户指南
  3. maven报错问题汇总
  4. Android 实现欢迎界面
  5. 物联网-云开发(Tlink云、机智云、百度云、阿里云等)
  6. LC.1175. Prime Arrangements
  7. K - Star Arrangements
  8. CTRL键不能使用(非硬件问题)
  9. 商汤科技推出SenseCore AI大装置,打造物理世界的搜索引擎
  10. 山无棱-天地合-乃敢与君绝