POI 导出Excel,部分单元格的锁定和背景至灰
先来看看效果
直接上代码
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,部分单元格的锁定和背景至灰相关推荐
- POI导出——Excel实现单元格的背景色填充
1.背景 随着业务需求的扩充,简简单单的Excel导出已经不能满足客户的胃口了.而POI api这个家伙里面的坑有时候真的是让你分分钟没有脾气,所以打算记录下来,分享一下poi的坑及其解决方法. 2. ...
- POI导出Excel设置单元格背景色
POI导出Excel设置单元格背景色 导出Excel的时候,没有设置背景色,用2003版本的Excel工具打开会出现文档单元格背景自动填充黑色的情况,没有找到好的解决方法,就主动给他填充一种颜色,问题 ...
- java导出excel表格设置行高,POI导出Excel设置单元格格式
使用Apache的POI相关API导出Excel设置单元格格式 栗子,一下各个代码之间的变量是通用的,要是在某个代码块中找不到某个变量,则可以向上找寻 准备工作 InputStream = templ ...
- POI导出EXCEL合并单元格对象嵌套List数据
导出EXCEL 在实际的开发过程当中,我们会遇到一些比较复杂的导出需求,例如需要导出的实体类中需要嵌套集合对象等,正好最近碰到了所以分享出来,希望对大家有帮助 一.POI是什么 简单的说就是Apach ...
- poi导出Excel合并单元格、设置打印参数页眉页脚等
由于生成文件不能落地,使用SXSSFWorkBook来对excel的导出工作 生成excel步骤: 1.创建workbook SXSSFWorkbook workbook=new SXSSFWorkb ...
- java POI导出excel,合并单元格边框消失
业务是导出一个报表,要求有一个跨多列的表头,肯定要用到合并单元格,但合并后边框消失.网上的一些解决办法是重写合并单元格方法,但弄清楚原因后,其实没必要. 原来是这样的: 合并后就第一个有边框,其余全成 ...
- POI 导出 excel 设置单元格背景色 的坑
1.必须调用设置前景色的方法来设置背景色: 2.必须调用 setFillPattern(): 3.代码如下: //cl.setFillBackgroundColor(IndexedColors.YEL ...
- poi导出excel合并单元格
/*导出服务*/@RequestMapping(value = "/exportMaintenance.html")public void exportMaintenance(Ht ...
- java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...
java中导出excel设置单元格的样式为数字格式怎么设置 如果是使用poi,它会自动根据参数值设置单元格为恰当格式,只需传入数字类型参数值即可,比如 double value=....; cell. ...
- springboot项目导出excel 合并单元格表格
springboot项目导出excel 合并单元格表格 导出效果 业务controller 业务数据 业务实体类 注解MyExcel.java 注解 MyExcels 导出工具类MyExcelUtil ...
最新文章
- mysql数据库优化命令_MySQL数据库优化总结
- python sqlalchemy操作SQLite
- 汽车销售系统javaweb代码_有什么代驾系统能远离销售套路_搜狐汽车
- 图解用工具对PE文件格式做初步研究
- ML之RS之CF:基于用户的CF算法—利用大量用户的电影及其评分数据集对一个新用户Jason进行推荐电影+(已知Jason曾观看几十部电影及其评分)
- linux neo4j 服务器,如何在linux服务器上配置Neo4j · Digital World
- mysql delete limit用法_你习惯delete语句后带上limit吗
- JDK和Spring中的设计模式
- Mybatis+Tomcat使用JNDI配置数据源入门
- 检测React组件外部的点击
- ubuntu下rz,sz命令用法
- 物流管理系统(数据库+后台+springMVC+Mybatis+layui)(一)
- Inno Setup for Windows service
- 计算机专业问卷调查,大学生计算机专业调查问卷.doc
- linux qemu的使用教程,详解QEMU网络配置的方法
- 【Web安全笔记】之【11.0 其他】
- 5G时代要来了?5G到底什么样?
- 分布式计算原理之分布式协调与同步(1)——分布式互斥
- IT笔记-电脑内存满之系统报告过多问题
- 面向移动设备的html5开发框架
热门文章
- 要如何实现pdf图片提取?可以试试这些方法
- regester正则用法_Regester(正则表达式测试器)官方版
- Android 适配深色模式
- html style设置靠右,css怎么设置右对齐
- 创建Date对象的几种方式
- python处理xps文件_xps/pdf/png/json转换
- 【全志V3s / LicheePi Zero / 荔枝派】Air724合宙4G模块RNDIS拨号
- java用户行为日志记录方法_简单易用的开源用户操作日志记录系统
- 五分钟了解机器学习的基本概念
- 对报表.FRX文件的全面分析