先来看看效果



直接上代码

public void doExport(HttpServletRequest request, HttpServletResponse response, List<ProductionPlanActualIEO> list) {//这是我封装的一个个方法,其目的是设置导出文件的名字,不需要的可以不写ExportHelper.prepareExportXlsx(response, EXPORT_FILE_NAME);//获取模板路径File file = templateFileManager.get(EXPORT_FILE_MODEL_NAME);try (FileInputStream templateStream = new FileInputStream(file);Workbook workbook = WorkbookFactory.create(templateStream);OutputStream outputStream = response.getOutputStream()) {//创建中间内容writeTableData(workbook, list);workbook.write(outputStream);} catch (Exception e) {throw new BusinessException(SystemResultStatus.EXCEL_WRITING_ERROR);}}/**
*这里面才是锁定单元格,和背景至灰
**/
private void writeTableData(Workbook workbook, List<ProductionPlanActualIEO> list) {Sheet sheet = workbook.getSheetAt(0);//要先将sheet保护起来。里面输入密码。也可以为“”sheet.protectSheet("");//设置样式,非锁定状态。true为锁定CellStyle unlockStyle = workbook.createCellStyle();unlockStyle.setLocked(false);//设置样式,背景颜色为灰色CellStyle greyStyle = workbook.createCellStyle();greyStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);greyStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//我从第3行开始将数据导出到Excel中int rowNum = ROW_START_OF_DATA;for(ProductionPlanActualIEO data : list){//一条数据一行,下面会进行++操作Row currentRow = sheet.getRow(rowNum);if (currentRow == null) {currentRow = sheet.createRow(rowNum);}//拿到或者创建单元格Cell cellId = getOrCreateCell(currentRow,COL_ID);//至灰,后面大致相同cellId.setCellValue(data.getId());Cell cellPlanNo = getOrCreateCell(currentRow,COL_PLAN_NO);cellPlanNo.setCellValue(data.getPlanNumber());cellPlanNo.setCellStyle(greyStyle);Cell cellPlanDate = getOrCreateCell(currentRow,COL_PLAN_DATE);cellPlanDate.setCellValue(data.getPlanDate());cellPlanDate.setCellStyle(greyStyle);Cell cellPlanClass = getOrCreateCell(currentRow,COL_PLAN_CLASS);cellPlanClass.setCellValue(data.getPlanShift());cellPlanClass.setCellStyle(greyStyle);Cell cellMaterielNo = getOrCreateCell(currentRow,COL_MATERIEL_NO);cellMaterielNo.setCellValue(data.getMaterialCode());cellMaterielNo.setCellStyle(greyStyle);Cell cellPlanNum = getOrCreateCell(currentRow,COL_PLAN_NUMBER);cellPlanNum.setCellValue(data.getPlanAmount().toString());cellPlanNum.setCellStyle(greyStyle);Cell cellUseTime = getOrCreateCell(currentRow,COL_USE_TIME);cellUseTime.setCellValue(data.getUseTime());cellUseTime.setCellStyle(greyStyle);Cell cellPlanConfirm = getOrCreateCell(currentRow,COL_PLAN_CONFIRM);cellPlanConfirm.setCellValue(data.getConfirmPlanAmount());Cell cellPlanAchievements = getOrCreateCell(currentRow,COL_PLAN_ACHIEVEMENTS);cellPlanAchievements.setCellValue(data.getActualAmount());//这里是设置可以编辑的单元格,也就是图中看到的可以编辑的cellif(data.getStaus().equals("0")){cellPlanConfirm.setCellStyle(unlockStyle);cellPlanAchievements.setCellStyle(unlockStyle);}else{cellPlanConfirm.setCellStyle(greyStyle);cellPlanAchievements.setCellStyle(greyStyle);}rowNum++;}}/*** 新建或获取单元格* @param row* @param colNum* @return*/private Cell getOrCreateCell(Row row, int colNum) {Cell cell = row.getCell(colNum);if (cell == null) {cell = row.createCell(colNum);}return cell;}

这里可以跳过,我自己做的封装(部分)-----------------------------------------

public static void prepareExportXlsx(HttpServletResponse response, String filename) {String formattedFilename = formatFilename(filename, SUFFIX_XLSX);prepareResponse(response, formattedFilename);}public static String formatFilename(String filename, String suffix) {String user = "system";if (Context.isUserContext()) {user = Context.getUsername();}return String.format(FILENAME_PATTERN, filename, user, DateFormatUtils.format(new Date(), DEFAULT_TIME_FORMAT), suffix);}public static void prepareResponse(HttpServletResponse response, String filename) {try {String parsedFilename = URLEncoder.encode(filename, StandardCharsets.UTF_8.name());response.setCharacterEncoding(StandardCharsets.UTF_8.name());response.setHeader(HEADER_CONTENT_DISPOSITION,"attachment; filename=" + parsedFilename);response.setHeader(HEADER_FILENAME, parsedFilename);response.setContentType(DEFAULT_CONTENT_TYPE);} catch (UnsupportedEncodingException e) {throw new IllegalStateException(e);}}

跳过结束-----------------------------------------------------------------------------------

有疑问的可以给我留言,有时间会回复!

POI 导出Excel,部分单元格的锁定和背景至灰相关推荐

  1. POI导出——Excel实现单元格的背景色填充

    1.背景 随着业务需求的扩充,简简单单的Excel导出已经不能满足客户的胃口了.而POI api这个家伙里面的坑有时候真的是让你分分钟没有脾气,所以打算记录下来,分享一下poi的坑及其解决方法. 2. ...

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

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

  3. java导出excel表格设置行高,POI导出Excel设置单元格格式

    使用Apache的POI相关API导出Excel设置单元格格式 栗子,一下各个代码之间的变量是通用的,要是在某个代码块中找不到某个变量,则可以向上找寻 准备工作 InputStream = templ ...

  4. POI导出EXCEL合并单元格对象嵌套List数据

    导出EXCEL 在实际的开发过程当中,我们会遇到一些比较复杂的导出需求,例如需要导出的实体类中需要嵌套集合对象等,正好最近碰到了所以分享出来,希望对大家有帮助 一.POI是什么 简单的说就是Apach ...

  5. poi导出Excel合并单元格、设置打印参数页眉页脚等

    由于生成文件不能落地,使用SXSSFWorkBook来对excel的导出工作 生成excel步骤: 1.创建workbook SXSSFWorkbook workbook=new SXSSFWorkb ...

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

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

  7. POI 导出 excel 设置单元格背景色 的坑

    1.必须调用设置前景色的方法来设置背景色: 2.必须调用 setFillPattern(): 3.代码如下: //cl.setFillBackgroundColor(IndexedColors.YEL ...

  8. poi导出excel合并单元格

    /*导出服务*/@RequestMapping(value = "/exportMaintenance.html")public void exportMaintenance(Ht ...

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

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

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

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

最新文章

  1. mysql数据库优化命令_MySQL数据库优化总结
  2. python sqlalchemy操作SQLite
  3. 汽车销售系统javaweb代码_有什么代驾系统能远离销售套路_搜狐汽车
  4. 图解用工具对PE文件格式做初步研究
  5. ML之RS之CF:基于用户的CF算法—利用大量用户的电影及其评分数据集对一个新用户Jason进行推荐电影+(已知Jason曾观看几十部电影及其评分)
  6. linux neo4j 服务器,如何在linux服务器上配置Neo4j · Digital World
  7. mysql delete limit用法_你习惯delete语句后带上limit吗
  8. JDK和Spring中的设计模式
  9. Mybatis+Tomcat使用JNDI配置数据源入门
  10. 检测React组件外部的点击
  11. ubuntu下rz,sz命令用法
  12. 物流管理系统(数据库+后台+springMVC+Mybatis+layui)(一)
  13. Inno Setup for Windows service
  14. 计算机专业问卷调查,大学生计算机专业调查问卷.doc
  15. linux qemu的使用教程,详解QEMU网络配置的方法
  16. 【Web安全笔记】之【11.0 其他】
  17. 5G时代要来了?5G到底什么样?
  18. 分布式计算原理之分布式协调与同步(1)——分布式互斥
  19. IT笔记-电脑内存满之系统报告过多问题
  20. 面向移动设备的html5开发框架

热门文章

  1. 要如何实现pdf图片提取?可以试试这些方法
  2. regester正则用法_Regester(正则表达式测试器)官方版
  3. Android 适配深色模式
  4. html style设置靠右,css怎么设置右对齐
  5. 创建Date对象的几种方式
  6. python处理xps文件_xps/pdf/png/json转换
  7. 【全志V3s / LicheePi Zero / 荔枝派】Air724合宙4G模块RNDIS拨号
  8. java用户行为日志记录方法_简单易用的开源用户操作日志记录系统
  9. 五分钟了解机器学习的基本概念
  10. 对报表.FRX文件的全面分析