需求:导入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(设置下拉框)下载本地和前端下载的更多相关文章

  1. POI设置excel添加列下拉框

    POI在生成excel模板时需要为列添加下拉框,我写了两个方法. @ 方法一:适用任何情况,不受下拉框值数量限制.但是需要通过引用其它列值. 思路大概如下: 1.创建一个隐藏的sheet页,用于存放下 ...

  2. poi生成excel整理(设置边框/字体/颜色/加粗/居中/)

    转: poi生成excel整理(设置边框/字体/颜色/加粗/居中/) 2016年12月02日 11:05:23 吃奶的牛 阅读数:34324   HSSFWorkbook wb = new HSSFW ...

  3. Jquery动态设置下拉框selected --(2018 08/12-08/26周总结)

    1.Jquery动态根据内容设置下拉框selected 需求就是根据下拉框的值动态的设置为selected,本以为很简单,网上一大推的方法,挨着尝试了之后却发现没有一个是有用的.网上的做法如下: &l ...

  4. js 设置下拉框的默认值

    设置下拉框的默认值,直接在option中增加selected就可以了.但是现在要使用JS来设置它的默认值,代码如下: <select name="aaa" id=" ...

  5. jquery 根据后台传过来的值动态设置下拉框、单选框选中

    更多内容推荐微信公众号,欢迎关注: jquery  根据后台传过来的值动态设置下拉框.单选框选中 $(function(){ var sex=$("#sex").val(); va ...

  6. 【WPF学习笔记】之如何设置下拉框读取SqlServer数据库的值:动画系列之(一)

    先前条件:设置好数据库,需要三个文件CommandInfo.cs.DbHelperSQL.cs.myHelper.cs,需要修改命名空间,参照之前随笔http://www.cnblogs.com/Ow ...

  7. jquery设置下拉框selected不起作用

    在js中设置下拉框被选中: 最初写法: //移出selected $("#selected option").removeAttr("selected"); / ...

  8. Java使用poi生成Excel,生成两种表格下拉框

    想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...

  9. java使用poi生成excel

    使用poi生成excel通常包含一下几个步骤 创建一个工作簿 创建一个sheet 创建一个Row对象 创建一个cell对象(1个row+1个cell构成一个单元格) 设置单元格内容 设置单元格样式. ...

随机推荐

  1. vue开大主要难点解决方式

    问题:在我们那vue开发项目时,多层嵌套组件最繁琐,组件传参成最难的问题,并且对兄弟组件传参也无能为力,也会导致代码很难维护. 解决:采用vuex状态管理,把所有的事件和状态都储存在store对象中, ...

  2. 第六篇 CSS样式 背景、背景图、文本、链接

    元素背景.文本(字体)样式.链接 这里我们只学习常用的一些,更多的扩展就要同学们自己去了解,或者下方评论. 这里我们为了简便,用的是CSS的内嵌形式.   元素背景: 我们写模块的时候,有的时候为了区 ...

  3. todo 看看堆栈里的东西

    类变量,成员变量,静态方法里的变量.参数,成员方法里的变量,参数

  4. monkey 进阶使用手册,monkey随机测试后怎么定位问题

    首先我们知道使用monkey后,我们可以查看三种类型的日志,一种是安卓内核日志,一种是安卓系统自己的日志,还有一种是monkey日志. 当我们使用monkey进行随机测试时,如何才知道我们这次随机测试 ...

  5. MyCat配置简述以及mycat全局ID

    Mycat可以直接下载解压,简单配置后可以使用,主要配置项如下: 1. log4j2.xml:配置MyCat日志,包括位置,格式,单个文件大小 2. rule.xml: 配置分片规则 3. schem ...

  6. windows删除已注册服务

    背景:近日,想要学习mysql主从复制,于是想在本地用多个mysql实例进行试验,试验的过程中总是挫折不断,生手不易,安装了很多实例,测试完成之后,想要删除这些实例. 虽然任务管理器可以停止任务,但是 ...

  7. 使用go语言开发一个后端gin框架的web项目

    用liteide来开发go的后端项目,需要注意的是环境变量要配置正确了 主要是GOROOT, GOPATH, GOBIN, PATH这几个, GOPATH主要用来存放要安的包,主要使用go get 来 ...

  8. Summer training round2 #4 (Training #20)

    A!:UESTC1752 B!:找区间内L到R之间内的数的个数  权值分块加莫队 C!:给你一个哈斯图 去掉其中的几条边 要求输出字典序最大的拓扑排序:线段树模拟拓扑排序 D!:要求你找到最短路树并输 ...

  9. 第二章 Vue快速入门-- 27 字符串的padStart方法使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  10. mysql5.7.26部署MHA

    前期准备: mysql先部署好GTID主从,然后才部署MHA 1)环境准备(所有节点) #安装依赖包 yum install perl-DBD-MySQL -y #进入安装包存放目录 [root@my ...