本篇内容主要讲解“JAVA怎么去掉Excel中的对象”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA怎么去掉Excel中的对象”吧!
成都创新互联公司是专业的招远网站建设公司,招远接单;提供网站设计制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行招远网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
判断是否存在对象。
先贴一下今天尝试的代码。代码执行后,文件变小了,但文件中的对象还是存在。所以毫无办法。坑爹的office
//JAVA导入Excel 报错 java.io.IOException: Zip bomb detected! ZipSecureFile.setMinInflateRatio(-1.0d); // 创建XSSF的workbook XSSFWorkbook book = XSSFWorkbookFactory.createWorkbook(file.getInputStream()); // 这一行没什么用,只是为了看里面方法和值 CTWorksheet ctWorksheet = book.getSheetAt(0).getCTWorksheet(); // 获取画图管理器 XSSFDrawing drawingPatriarch = book.getSheetAt(0).getDrawingPatriarch(); // 这一行也没什么用,因为对象依然存在 book.getSheetAt(0).getPackagePart().clear(); // 没什么用 CTShape ctShape = new CTShapeImpl(ctWorksheet.schemaType()); // 获取XSSFShape列表,就是那些该死的对象。 Listshapes = drawingPatriarch.getShapes(); // a、b、c、d、flag、shapeNames都没什么用,只是为了代码执行时,能观察数量和对象名称 int a = 0; int b = 0; int c = 0; int d = 0; boolean flag = false; List shapeNames = new ArrayList<>(); for (XSSFShape xssfShape:shapes){ shapeNames.add(xssfShape.getShapeName()); xssfShape.setLineStyle(0); xssfShape.setLineWidth(0); // 将对象的三围搞到0. XSSFClientAnchor anchor = (XSSFClientAnchor) xssfShape.getAnchor(); anchor.setCol1(0); anchor.setCol2(0); anchor.setDx1(0); anchor.setDx2(0); anchor.setDy1(0); anchor.setDy2(0); anchor.setRow1(0); anchor.setRow2(1); d++; } System.out.println("a:"+a); System.out.println("b:"+b); System.out.println("c:"+c); System.out.println("d:"+d); System.out.println("flag:"+flag); System.out.println("对象名称:"+ shapeNames.get(0));
改造后
XSSFWorkbook book = XSSFWorkbookFactory.createWorkbook(file.getInputStream()); XSSFDrawing drawingPatriarch = book.getSheetAt(0).getDrawingPatriarch(); if (drawingPatriarch != null && drawingPatriarch.getShapes().size()>0){ return ApiResult.error("文件中存在隐藏对象,请重新整理。粘贴时,只粘贴文字"); }
到此,相信大家对“JAVA怎么去掉Excel中的对象”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!