java exce对象清空_JAVA 如何去掉Excel中的对象?

能力有限,今天一天时间也没有解决这个问题。所以只能绕道而行。

判断是否存在对象。

先贴一下今天尝试的代码。代码执行后,文件变小了,但文件中的对象还是存在。所以毫无办法。坑爹的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列表,就是那些该死的对象。

List shapes = 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("文件中存在隐藏对象,请重新整理。粘贴时,只粘贴文字");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值