java操作poi生成excel.xlsx(设置下拉框)下载本地和前端下载
需求:导入excel表格,如果excel有错误,将错误的地方标红,在把数据以excel的形式写出,供用户下载
解决方案:1.以实体类的方式接收excel并解析(创建两个集合一个接收正常的数据一个接收错误的数据)
2.错误集合无论正确错误数据都要存储,并记录是否有误(错误数据拼接特殊字符作为标记,然后记录写入集合)
3.如果发现记录有错误记录,就要使用错误数据集合生成excel(对错误的数据对特殊字符截取)
4.将错误的excel生成到工程的相对的路径下,也可以上传服务器更好(下次下载前要记得清理记录),返回前端一个地址,前端点击链接进行下载
5.下面是片段代码
- public static SXSSFWorkbook createExportInterviewExcel(List<Operator> data, String sheetName) {
- SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(100);
- //标题栏设置
- CellStyle style = sxssfWorkbook.createCellStyle();
- style.setWrapText(true);//自动换行
- style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直居中
- style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居左
- Font font = sxssfWorkbook.createFont();
- font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //字体增粗
- style.setFont(font);
- DataFormat formats = sxssfWorkbook.createDataFormat();
- style.setDataFormat(formats.getFormat("@"));//设置文本格式
- //正常格式设置
- CellStyle cellStyle = sxssfWorkbook.createCellStyle();
- //cellStyle.setWrapText(true);//自动换行
- cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直居中
- cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居左
- DataFormat format = sxssfWorkbook.createDataFormat();
- cellStyle.setDataFormat(format.getFormat("@"));//设置文本格式
- Sheet taskInfoSheet = sxssfWorkbook.createSheet(sheetName);
- DataValidationHelper helper = taskInfoSheet.getDataValidationHelper();//设置下拉框xlsx格式
- //设置列宽
- taskInfoSheet.setColumnWidth(5, 256 * 21);
- taskInfoSheet.setColumnWidth(6, 256 * 15);
- taskInfoSheet.setColumnWidth(7, 256 * 15);
- taskInfoSheet.setColumnWidth(8, 256 * 20);
- taskInfoSheet.setColumnWidth(18, 256 * 20);
- // 第一行标题
- Row row_tital = taskInfoSheet.createRow(0);
- String[] keyWord = {"姓名","性别","民族", "年龄", "学历", "身份证号", "手机号",
- "在我司任职过", "岗位名", "广告名", "部门","工作地", "推荐人","推荐人电话","推荐人部门","推荐人工号", "面试安排时间","是否录用", "淘汰类型", "淘汰原因"};
- for (int i = 0; i < keyWord.length; i++) {
- Cell cell_tital_index = row_tital.createCell(i);
- cell_tital_index.setCellValue(keyWord[i]);
- cell_tital_index.setCellStyle(style);
- }
- //异常情况处理
- if (CollectionUtils.isEmpty(data) ||(CollectionUtils.isNotEmpty(data) && StringUtils.isBlank(data.get(0).getName()))) {
- return sxssfWorkbook;
- }
- // 数据行
- for (int i = 0; i < data.size(); i++) { // 导出详情
- Row row_data = taskInfoSheet.createRow(i + 1);
- Cell cell_data_name = row_data.createCell(0);
- cell_data_name.setCellValue(data.get(i).getName());
- cell_data_name.setCellStyle(cellStyle);
- Cell cell_data_nation = row_data.createCell(1);
- cell_data_nation.setCellValue(data.get(i).getNational());
- cell_data_nation.setCellStyle(cellStyle);
- Cell cell_data_age = row_data.createCell(2);
- Integer age= null;
- if(data.get(i).getAge()!= null){
- age = data.get(i).getAge();
- }else{
- age=1;
- }
- cell_data_age.setCellValue(age);
- cell_data_age.setCellStyle(cellStyle);
- //添加工作地
- Cell cell_data_location =row_data.createCell(3);
- cell_data_location.setCellValue(data.get(i).getLocation());
- cell_data_location.setCellStyle(cellStyle);
- Cell cell_data_referrer = row_data.createCell(4);
- cell_data_referrer.setCellValue(data.get(i).getReferrer());
- cell_data_referrer.setCellStyle(cellStyle);
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- String interviewTime = "";
- if (null != data.get(i).getInterviewTime()) {
- interviewTime = sdf.format(data.get(i).getInterviewTime());
- }
- Cell cell_data_interviewTime = row_data.createCell(5);
- cell_data_interviewTime.setCellValue(interviewTime);
- cell_data_interviewTime.setCellStyle(cellStyle);
- String[] yesOrNo = {"是", "否"};
- creatDropDownList(taskInfoSheet,helper,yesOrNo,1,200,6,6);
- String[] list = {"不符合返聘要求", "不符合公司规则", "综合素质", "其他"};
- creatDropDownList(taskInfoSheet, helper, list, 1, 200, 7, 7);
- }
- return sxssfWorkbook;
- }
- //创建下拉框
- private static void creatDropDownList(Sheet taskInfoSheet, DataValidationHelper helper, String[] list,
- Integer firstRow, Integer lastRow, Integer firstCol, Integer lastCol) {
- CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
- //设置下拉框数据
- DataValidationConstraint constraint = helper.createExplicitListConstraint(list);
- DataValidation dataValidation = helper.createValidation(constraint, addressList);
- //处理Excel兼容性问题
- if (dataValidation instanceof XSSFDataValidation) {
- dataValidation.setSuppressDropDownArrow(true);
- dataValidation.setShowErrorBox(true);
- } else {
- dataValidation.setSuppressDropDownArrow(false);
- }
- taskInfoSheet.addValidationData(dataValidation);
- }
- //需求:导入excel表格,如果excel有错误,将错误的地方标红,在把数据以excel的形式写出,供用户下载
- //解决方案:1.以实体类的方式接收excel并解析(创建两个集合一个接收正常的数据一个接收错误的数据)
- //2.错误集合无论正确错误数据都要存储,并记录是否有误(错误数据拼接特殊字符作为标记,然后记录写入集合)
- //3.如果发现记录有错误记录,就要使用错误数据集合生成excel(对错误的数据对特殊字符截取)
- //4.将错误的excel生成到工程的相对的路径下(下次下载前要记得清理记录),返回前端一个地址,前端点击链接进行下载
- //这个方法就是清除之前的文件夹
- private String getExportResult(SXSSFWorkbook sxssfWorkbook) {
- //删除之前文件夹下的文件
- String targetUrl = System.getProperty("export.error.result");
- File targetFile = new File(targetUrl);
- ContentUtil.deletAllFiles(targetFile);
- String fileName = null;
- try {
- fileName = System.getProperty("export.error.result") + UUID.randomUUID().toString() + ".xlsx";
- File file = new File(fileName);
- if (!file.exists()) {
- file.getParentFile().mkdirs();
- }
- FileOutputStream outputStream = new FileOutputStream(fileName);
- sxssfWorkbook.write(outputStream);
- outputStream.close();
- } catch (IOException e) {
- logger.error("OperatorInfoImportAuditResultServiceImpl下载导入错误excel表格异常", e);
- e.printStackTrace();
- }
- return fileName;
- }
- public static void deletAllFiles(File file) {
- if (file == null) {
- return;
- }
- if (file.exists()) {
- if (file.isFile()) {
- file.delete();
- }else if (file.isDirectory()) {
- File[] listFiles = file.listFiles();
- if (listFiles == null) {
- return;
- }
- for (File file2 : listFiles) {
- deletAllFiles(file2);
- }
- /* //递归跳出来的时候删除空文件夹
- file.delete();*/
- }
- }
- }
- @RequestMapping(value = "/exportErrorImportResult", method = RequestMethod.GET)
- public void exportErrorImportResult(@RequestParam(value = "paramUrl") String paramUrl, HttpServletResponse response, HttpServletRequest request) {
- //生成错误的文档
- try {
- XSSFWorkbook workbook = null;
- File file = new File(paramUrl);
- if (file.exists()) {
- FileInputStream in = new FileInputStream(file);
- workbook = new XSSFWorkbook(in);
- } else {
- logger.info("初级员工内推导出错误的excel文件,文件不存在");
- }
- OutputStream ouputStream = response.getOutputStream();
- String fileName = "导出错误";
- fileName = URLEncoder.encode(fileName, "UTF-8");
- response.reset();
- response.setContentType("application/vnd.ms-excel");
- response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
- workbook.write(ouputStream);
- ouputStream.flush();
- ouputStream.close();
- } catch (Exception e) {
- logger.error("导出错误的excel文件,OperatorPostInfoController 异常:", e);
- }
- }
java操作poi生成excel.xlsx(设置下拉框)下载本地和前端下载的更多相关文章
- POI设置excel添加列下拉框
POI在生成excel模板时需要为列添加下拉框,我写了两个方法. @ 方法一:适用任何情况,不受下拉框值数量限制.但是需要通过引用其它列值. 思路大概如下: 1.创建一个隐藏的sheet页,用于存放下 ...
- poi生成excel整理(设置边框/字体/颜色/加粗/居中/)
转: poi生成excel整理(设置边框/字体/颜色/加粗/居中/) 2016年12月02日 11:05:23 吃奶的牛 阅读数:34324 HSSFWorkbook wb = new HSSFW ...
- Jquery动态设置下拉框selected --(2018 08/12-08/26周总结)
1.Jquery动态根据内容设置下拉框selected 需求就是根据下拉框的值动态的设置为selected,本以为很简单,网上一大推的方法,挨着尝试了之后却发现没有一个是有用的.网上的做法如下: &l ...
- js 设置下拉框的默认值
设置下拉框的默认值,直接在option中增加selected就可以了.但是现在要使用JS来设置它的默认值,代码如下: <select name="aaa" id=" ...
- jquery 根据后台传过来的值动态设置下拉框、单选框选中
更多内容推荐微信公众号,欢迎关注: jquery 根据后台传过来的值动态设置下拉框.单选框选中 $(function(){ var sex=$("#sex").val(); va ...
- 【WPF学习笔记】之如何设置下拉框读取SqlServer数据库的值:动画系列之(一)
先前条件:设置好数据库,需要三个文件CommandInfo.cs.DbHelperSQL.cs.myHelper.cs,需要修改命名空间,参照之前随笔http://www.cnblogs.com/Ow ...
- jquery设置下拉框selected不起作用
在js中设置下拉框被选中: 最初写法: //移出selected $("#selected option").removeAttr("selected"); / ...
- Java使用poi生成Excel,生成两种表格下拉框
想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...
- java使用poi生成excel
使用poi生成excel通常包含一下几个步骤 创建一个工作簿 创建一个sheet 创建一个Row对象 创建一个cell对象(1个row+1个cell构成一个单元格) 设置单元格内容 设置单元格样式. ...
随机推荐
- ES6 模块的加载实现 import和export
ES6的Class只是面向对象编程的语法糖,升级了ES5的构造函数的原型链继承的写法,并没有解决模块化问题.Module功能就是为了解决这个问题而提出的. 历史上,JavaScript一直没有模块(m ...
- Linux配置nginux
安装依赖 yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install openssl openssl- ...
- 架构师成长之路5.3-Saltstack配置管理(State状态模块)
点击架构师成长之路 架构师成长之路5.3-Saltstack配置管理(State状态模块) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需要 ...
- Django学习系列15:把POST请求中的数据存入数据库
要修改针对首页中的POST请求的测试.希望视图把新添加的待办事项存入数据库,而不是直接传给响应. 为了测试这个操作,要在现有的测试方法test_can_save_a_post_request中添加3行 ...
- 【洛谷P2147】洞穴勘测
题目大意:维护 N 个点的无向图,支持动态加边和删边,回答两点的连通性. 题解:线段树分治 + 可撤销并查集 询问可以离线,这是线段树分治的基础. 建立在操作时间轴上的线段树称为线段树分治算法. 本题 ...
- 使用GitHub(三):使用VSCode+GitHub进行版本控制
使用GitHub(三):使用VSCode+GitHub进行版本控制 本文简单介绍使用VSCode+GitHub进行项目或者代码的版本控制.本文主要目的是对学习内容进行总结以及方便日后查阅. 详细教程和 ...
- 【转载】awk入门
作者: 阮一峰 http://www.ruanyifeng.com/blog/2018/11/awk.html awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序. 它依次处 ...
- 初学者的springmvc笔记02
springmvc笔记 springmvc拦截器,spring类型转换,spring实现文件上传/下载 1.SpringMVC标准配置 导入jar包:core contaner 在web.xml文件中 ...
- 科普TPF知识
https://tieba.baidu.com/p/4926092734?see_lz=1&pn=1 707680700 https://tieba.baidu.com/p/492609273 ...
- count(列) count(*)
总结:但是真的结论是这样的么.其实不然.其实在数据库中count(*)和count(列)根本就是不等价的,count(*)是针对于全表的,而count(列)是针对于某一列的,如果此列值为空的话,cou ...