【java】列表导出excel(支持单元格内容换行展示)
这里写目录标题
- 业务背景
- 前端
- 后端
- 导出效果
业务背景
如下图,想将用户选中的记录导出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(支持单元格内容换行展示)相关推荐
- java POI导出excel,合并单元格边框消失
业务是导出一个报表,要求有一个跨多列的表头,肯定要用到合并单元格,但合并后边框消失.网上的一些解决办法是重写合并单元格方法,但弄清楚原因后,其实没必要. 原来是这样的: 合并后就第一个有边框,其余全成 ...
- java SXSSF 导出excel 合并单元格,设置打印分页
官方poi地址: Busy Developers' Guide to HSSF and XSSF Features HSSFWorkbook.XSSFWorkbook.SXSSFWorkbook的区别 ...
- vue 导出excel,支持单元格合并,背景色,列宽,字体大小等
npm下载 npm i xlsx.full.min npm i xlsx-style 关键代码如下 downloadExl(data, name, datab) {const wopts = {boo ...
- java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...
java中导出excel设置单元格的样式为数字格式怎么设置 如果是使用poi,它会自动根据参数值设置单元格为恰当格式,只需传入数字类型参数值即可,比如 double value=....; cell. ...
- springboot项目导出excel 合并单元格表格
springboot项目导出excel 合并单元格表格 导出效果 业务controller 业务数据 业务实体类 注解MyExcel.java 注解 MyExcels 导出工具类MyExcelUtil ...
- 导出excel此单元格中的数字为文本格式,或者其前面有撇号
前言: 无论大家使用的是java,js,.net等技术导出excel,都会出现下面的问题. 这篇文章只提供解决思路,以及用easyexcel导出 的处理方式,其他技术大家可以举一反三. 1.导出exc ...
- C# 使用 NPOI 处理Excel导入单元格内容是公式问题
C# 使用 NPOI 处理Excel导入单元格内容是公式问题 引言:今天在处理业务的时候,碰到导入Excel数据不成功的问题,那么就在这里做下笔记吧. 首先,我们有以下的数据.整块业务逻辑的代码在最后 ...
- Java POI 对Excel合并单元格的数据处理
Java POI 对Excel合并单元格的数据处理 最近在项目开发过程中,有个一个导入Excel文件处理合并单元格数据的需求,就自己在网上找了一个模板,自己进行二次开发来开发需求. Excel工具类 ...
- POI导出Excel设置单元格背景色
POI导出Excel设置单元格背景色 导出Excel的时候,没有设置背景色,用2003版本的Excel工具打开会出现文档单元格背景自动填充黑色的情况,没有找到好的解决方法,就主动给他填充一种颜色,问题 ...
- 用EasyPoi导出Excel中单元格图片(线上阿里云)
用EasyPoi导出Excel中单元格图片(线上阿里云): 导出数据需要包含图片 问题描述 提示:这里描述项目中遇到的问题: 数据库中存储图片格式是阿里云(oss)的图片url,导出excel显示图片 ...
最新文章
- 北京大学,签约这个省份!
- 企业网络推广浅析网站首页什么样的布局有利于优化?
- python多线程爬虫数据顺序_多线程爬取小说时如何保证章节的顺序
- xml web service
- Briage桥接设计模式
- 将数据传入重定向网页
- Marketing Cloud里使用了哪个版本的UI5 Odata模型?
- emqx使用webhook数据持久化到mysql
- 2017.8.7 GT考试 思考记录
- ubuntu下安装subversion客户端:
- autolayout中 top layout guide详解
- MJRefresh自定义刷新动画
- liunx 监控工具sar
- php匹配ubb,php创建属于自己的UBB代码
- Oracle查询执行计划
- 确定有限自动机DFA
- Win10使用GPT格式为大硬盘分区(2.2T 以上)
- win10打开视频显示服务器运行失败,apache启动失败,详细教您快速解决Win10系统apache启动失败...
- 我非英雄,广目无双,我本坏蛋,无限嚣张
- 华为云计算IE面试笔记-简述Fusion Storage主要模块MDC,OSD,VBS,FSA及FSM的功能定位及交互关系