java 使用poi导出Excel,设置单元格保护不可编辑,设置下拉框
来源:互联网 发布:淘宝咨询电话是多少 编辑:程序博客网 时间:2024/06/07 04:46
一、需求:
1、第一列 不可编辑(对应Excel中的保护工作表),其他列可以编辑
2、第五列和第十四列为下拉框
3、可以在导出后新增行数据
二、期间遇到的问题
1、无法设置成不可编辑
2、解决1后未满足需求3,即在导出的Excel中直接编辑新行是提示写保(原因是Excel单元格默认是锁定状态,而保护工作表是保护的锁定的单元格),思路:直接操作列
3、解决2后,发现直接编辑新行时下拉框没起到作用,只是导出的数据有下拉框
注意:
1、解决setDefaultColumnStyle无效的方法
你会发现,设置好style以后,column会隐藏起来,原因在createCellStyle的时候,默认宽度为0,所以会被隐藏起来了,所以需要设置宽度
//设置列格式,注释1sheet.setColumnWidth(i, 4000); //设置宽度//行号,样式sheet.setDefaultColumnStyle(i, unlockstyle);
说明:不考虑代码规范性,只作为参考使用
解决问题方法:
1、设置单元格保护(灵感来自于Excel操作,先锁定,再设置保护工作表)
//单元格锁定的样式XSSFCellStyle lockstyle = workBook.createCellStyle();lockstyle.setLocked(true);lockstyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);lockstyle.setFillForegroundColor(IndexedColors.RED.getIndex());//单元格不锁定的样式XSSFCellStyle unlockstyle = workBook.createCellStyle();unlockstyle.setLocked(false);//这里设置单元格样式,需要保护的就设置成锁定,不需要保护的就设置成不锁定........// 设置锁定的单元格为写保护 注释2//sheet表加密:等效excel的审阅菜单下的保护工作表//sheet.protectSheet(new String("333"));//333是密码sheet.enableLocking();CTSheetProtection sheetProtection = sheet.getCTWorksheet().getSheetProtection();sheetProtection.setSelectLockedCells(false);sheetProtection.setSelectUnlockedCells(false);sheetProtection.setFormatCells(true);sheetProtection.setFormatColumns(true);sheetProtection.setFormatRows(true);sheetProtection.setInsertColumns(true);sheetProtection.setInsertRows(false);sheetProtection.setInsertHyperlinks(true);sheetProtection.setDeleteColumns(true);sheetProtection.setDeleteRows(true);sheetProtection.setSort(false);sheetProtection.setAutoFilter(false);sheetProtection.setPivotTables(true);sheetProtection.setObjects(true);sheetProtection.setScenarios(true);
2、设置列默认未锁定
//设置列格式,注释1sheet.setColumnWidth(i, 4000); //设置宽度//行号,样式sheet.setDefaultColumnStyle(i, unlockstyle);
3、设置下拉框,没找到直接设置列的方法,所以将行设置的大了些
//运输方式String[] textList1 = new String[]{"值1","值二","值三"};XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);XSSFDataValidationConstraint dvConstraint1 = (XSSFDataValidationConstraint) dvHelper .createExplicitListConstraint(textList1);//操作类型String[] textList2 = {"I","U","D"};XSSFDataValidationConstraint dvConstraint2 = (XSSFDataValidationConstraint) dvHelper .createExplicitListConstraint(textList2);//运输方式下拉 首行,末行,首列,末列addressList1 = new CellRangeAddressList(1,65536,4,4);dataValidation1 = (XSSFDataValidation) dvHelper.createValidation( dvConstraint1, addressList1); // 07默认setSuppressDropDownArrow(true); // validation.setSuppressDropDownArrow(true); // validation.setShowErrorBox(true); sheet.addValidationData(dataValidation1); //操作类型下拉 首行,末行,首列,末列 addressList2 = new CellRangeAddressList(1,65536,13,13);dataValidation2 = (XSSFDataValidation) dvHelper.createValidation( dvConstraint2, addressList2); // 07默认setSuppressDropDownArrow(true); // validation.setSuppressDropDownArrow(true); // validation.setShowErrorBox(true);sheet.addValidationData(dataValidation2);
所有代码
@Override@Transactional(propagation = Propagation.REQUIRED)public ResponseData exportData(String rowdatas,HttpServletResponse response){ ResponseData responseData = new ResponseData(); try { JSONArray rowArray = JSONArray.fromObject(rowdatas); List<RoutingRulesSetDto> resultlist = new ArrayList<RoutingRulesSetDto>(); List<RoutingRulesSetDto> rowlist = (List<RoutingRulesSetDto>) JSONArray.toCollection(rowArray, RoutingRulesSetDto.class); resultlist = routingRuleMapper.selectByIds(rowlist); XSSFWorkbook workBook = new XSSFWorkbook(); XSSFSheet sheet = workBook.createSheet(); //设置页名称 workBook.setSheetName(0, "sheet名"); //默认宽度 sheet.setDefaultColumnWidth(15); //设置title样式 XSSFCellStyle titleStyle = workBook.createCellStyle(); titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); titleStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); //单元格锁定的样式 XSSFCellStyle lockstyle = workBook.createCellStyle(); lockstyle.setLocked(true); lockstyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); lockstyle.setFillForegroundColor(IndexedColors.RED.getIndex()); //单元格不锁定的样式 XSSFCellStyle unlockstyle = workBook.createCellStyle(); unlockstyle.setLocked(false); //设置导出表头 String[] header = new String[]{"ID(不可编辑)","字段1","字段2","字段3", "字段4","字段5","字段6","字段7", "字段8","字段9","字段10","字段11","字段12","字段13"}; //创建表头行 XSSFRow row = sheet.createRow(0); XSSFCell cell; //插入Excel表头 for (short i = 0; i < header.length;i++) { cell =row.createCell(i); if(i == 0){ cell.setCellStyle(lockstyle); }else if(i==6 || i==7 || i==8 || i==10 || i==11 || i==12){ //设置列格式,注释1 sheet.setColumnWidth(i, 4000); sheet.setDefaultColumnStyle(i, unlockstyle); }else{ cell.setCellStyle(titleStyle); //设置列格式,注释1 sheet.setColumnWidth(i, 4000); sheet.setDefaultColumnStyle(i, unlockstyle); } XSSFRichTextString text = new XSSFRichTextString(header[i]); cell.setCellValue(text); } //下拉列表 CellRangeAddressList addressList1 = null; XSSFDataValidation dataValidation1 = null; CellRangeAddressList addressList2 = null; XSSFDataValidation dataValidation2 = null; //运输方式 String[] textList1 = new String[]{"值1","值二","值三"}; XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet); XSSFDataValidationConstraint dvConstraint1 = (XSSFDataValidationConstraint) dvHelper .createExplicitListConstraint(textList1); //操作类型 String[] textList2 = {"I","U","D"}; XSSFDataValidationConstraint dvConstraint2 = (XSSFDataValidationConstraint) dvHelper .createExplicitListConstraint(textList2); //运输方式下拉 首行,末行,首列,末列 addressList1 = new CellRangeAddressList(1,65536,4,4); dataValidation1 = (XSSFDataValidation) dvHelper.createValidation( dvConstraint1, addressList1); // 07默认setSuppressDropDownArrow(true); // validation.setSuppressDropDownArrow(true); // validation.setShowErrorBox(true); sheet.addValidationData(dataValidation1); //操作类型下拉 首行,末行,首列,末列 addressList2 = new CellRangeAddressList(1,65536,13,13); dataValidation2 = (XSSFDataValidation) dvHelper.createValidation( dvConstraint2, addressList2); // 07默认setSuppressDropDownArrow(true); // validation.setSuppressDropDownArrow(true); // validation.setShowErrorBox(true); sheet.addValidationData(dataValidation2); //遍历插入数据 for (int i = 0; i < resultlist.size(); i++) { row = sheet.createRow(i+1); // cell = row.createCell(0); cell.setCellValue(resultlist.get(i).getId() == null ? "" : resultlist.get(i).getId()); cell.setCellStyle(lockstyle); // cell = row.createCell(1); cell.setCellValue(resultlist.get(i).getOrCustomerId() == null ? "" : resultlist.get(i).getOrCustomerId()); cell.setCellStyle(unlockstyle); // cell = row.createCell(2); cell.setCellValue(resultlist.get(i).getItemGid() == null ? "" : resultlist.get(i).getItemGid()); cell.setCellStyle(unlockstyle); // cell = row.createCell(3); cell.setCellValue(resultlist.get(i).getCommodityGid() == null ? "" : resultlist.get(i).getCommodityGid()); cell.setCellStyle(unlockstyle); // cell = row.createCell(4); cell.setCellValue(resultlist.get(i).getTransportModeGid() == null ? "" : resultlist.get(i).getTransportModeGid()); cell.setCellStyle(unlockstyle); // cell = row.createCell(5); cell.setCellValue(resultlist.get(i).getOrSourceLocationGid() == null ? "" : resultlist.get(i).getOrSourceLocationGid()); cell.setCellStyle(unlockstyle); // cell = row.createCell(6); cell.setCellValue(resultlist.get(i).getOrSourceLocationName() == null ? "" : resultlist.get(i).getOrSourceLocationName()); cell.setCellStyle(unlockstyle); // cell = row.createCell(7); cell.setCellValue(resultlist.get(i).getSourceProvince() == null ? "" : resultlist.get(i).getSourceProvince()); cell.setCellStyle(unlockstyle); // cell = row.createCell(8); cell.setCellValue(resultlist.get(i).getSourceCity() == null ? "" : resultlist.get(i).getSourceCity()); cell.setCellStyle(unlockstyle); // cell = row.createCell(9); cell.setCellValue(resultlist.get(i).getOrDestLocationGid() == null ? "" : resultlist.get(i).getOrDestLocationGid()); cell.setCellStyle(unlockstyle); // cell = row.createCell(10); cell.setCellValue(resultlist.get(i).getOrDestLocationName() == null ? "" : resultlist.get(i).getOrDestLocationName()); cell.setCellStyle(unlockstyle); // cell = row.createCell(11); cell.setCellValue(resultlist.get(i).getDestProvince() == null ? "" : resultlist.get(i).getDestProvince()); cell.setCellStyle(unlockstyle); // cell = row.createCell(12); cell.setCellValue(resultlist.get(i).getDestCity() == null ? "" : resultlist.get(i).getDestCity()); cell.setCellStyle(unlockstyle); // cell = row.createCell(13); cell.setCellValue("U"); cell.setCellStyle(unlockstyle); } // 设置锁定的单元格为写保护 注释2 //sheet表加密:等效excel的审阅菜单下的保护工作表 //sheet.protectSheet(new String("333"));//333是密码 sheet.enableLocking(); CTSheetProtection sheetProtection = sheet.getCTWorksheet().getSheetProtection(); sheetProtection.setSelectLockedCells(false); sheetProtection.setSelectUnlockedCells(false); sheetProtection.setFormatCells(true); sheetProtection.setFormatColumns(true); sheetProtection.setFormatRows(true); sheetProtection.setInsertColumns(true); sheetProtection.setInsertRows(false); sheetProtection.setInsertHyperlinks(true); sheetProtection.setDeleteColumns(true); sheetProtection.setDeleteRows(true); sheetProtection.setSort(false); sheetProtection.setAutoFilter(false); sheetProtection.setPivotTables(true); sheetProtection.setObjects(true); sheetProtection.setScenarios(true); //创建流对象,并写入workBook ByteArrayOutputStream os = new ByteArrayOutputStream(); try { workBook.write(os); } catch (Exception e) { e.printStackTrace(); } Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); String data1 = dateFormat.format( now ); byte[] content = os.toByteArray(); InputStream iStream = new ByteArrayInputStream(content); response.reset(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(("导出文件名" +data1+ ".xlsx").getBytes("gbk"), "iso-8859-1")); ServletOutputStream oStream = response.getOutputStream(); BufferedInputStream bis = null; BufferedOutputStream bos = null; try { bis = new BufferedInputStream(iStream); bos = new BufferedOutputStream(oStream); byte[] buff = new byte[2048]; int bytesRead; while(-1 != (bytesRead = bis.read(buff,0,buff.length))){ bos.write(buff,0 ,bytesRead); } } catch (Exception e) { throw e; } finally { try { if(bis != null){ bis.close(); } if(bos != null){ bos.close(); } if(iStream != null){ iStream.close(); } if(oStream != null){ oStream.close(); } if(os != null){ os.close(); } } catch (Exception e2) { e2.printStackTrace(); } } responseData.setSuccess(true); responseData.setCode("S"); return responseData; } catch (Exception e) { e.printStackTrace(); responseData.setSuccess(false); responseData.setCode("E"); responseData.setMessage("程序异常"); return responseData; } }
阅读全文
0 0
- java 使用poi导出Excel,设置单元格保护不可编辑,设置下拉框
- POI 生成Excel表格 设置单元格保护
- java POI excel导出,并合并单元格设置宽度高度
- Java利用POI导出Excel设置单元格格式
- Poi导出excel设置单元格数值格式
- POI导出Excel及单元格的设置
- poi导出excel单元格样式设置
- java使用POI设置单元格内容下拉框选择和单元格提示功能
- Excel单元格下拉框设置
- java poi Excel单元格保护
- 使用POI设置EXCEL单元格格式
- java设置Excel单元格格式 POI
- java POI设置Excel单元格字体
- jTable设置单元格不可编辑
- Swing设置单元格不可编辑
- POI导出EXCEL带水印,以及单元格格式设置
- POI设置导出的EXCEL锁定指定的单元格
- poi操作excel导出单元格设置不同格式的方法
- 大数据的安全管理 -- Kerberos
- 神经网络超参之学习率η
- 两个数的最大值
- .Net Framework 4.6.2升级/ 指定的信任提供程序不认识或不支持使用者的指定格式
- BZOJ1030 [JSOI2007]文本生成器 补全AC自动机+简单DP
- java 使用poi导出Excel,设置单元格保护不可编辑,设置下拉框
- 亲测java清除html标签
- VIM字符匹配交换
- Hadoop集群搭建
- 手写SpringMVC框架
- 梯度下降(Gradient Descent)小结
- '好'在英语中使用的几种方式
- CentOS安装MySQL 5.7.9
- ios GCD 详解