查看POI的API可以发现HSSFBorderFormatting.setBoderDiagonal接口,尝试使用这个接口并没有任何作用。
HSSFSheetConditionalFormatting f = sheet.getSheetConditionalFormatting(); HSSFConditionalFormattingRule r = f.createConditionalFormattingRule(ComparisonOperator.NOT_EQUAL, "\"NONE\"", null); HSSFBorderFormatting boderF = r.createBorderFormatting(); boderF.setBackwardDiagonalOn(true); boderF.setDiagonalBorderColor(new HSSFColor.BLACK().getIndex()); boderF.setBorderDiagonal(BorderFormatting.BORDER_THICK); boderF.setBottomBorderColor(new HSSFColor.BLACK().getIndex()); boderF.setBorderBottom(BorderFormatting.BORDER_THICK); HSSFConditionalFormattingRule[] rules = {r}; CellRangeAddress[] regions = {new CellRangeAddress(7, 7, 0, 0)}; f.addConditionalFormatting(regions, rules);
上面代码我设置了A8单元格的对角线和底边,得到结果只有底边生效了。无奈只能用画图方式实现对角线。
/* * 在A1:A3之间cell(单位 分类)加入一条对角线 */ HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); HSSFClientAnchor a = new HSSFClientAnchor(0, 0, 1023, 255, (short)0, 0, (short)0, 2); HSSFShapeGroup group = patriarch.createGroup(a); group.setCoordinates(0, 0, 320, 276); float verticalPointsPerPixel = a.getAnchorHeightInPoints(sheet) / Math.abs(group.getY2() - group.getY1()); EscherGraphics g = new EscherGraphics(group, wbook, Color.black, verticalPointsPerPixel); EscherGraphics2d g2d = new EscherGraphics2d(g); g2d.drawLine(0, 0, 320, 276);
下面的截图是两段代码的输出效果:
是不是我使用HSSFBorderFormatting.setBoderDiagonal接口方式有错才没生效,有了解的人请回复一下,谢谢。