Hi, yes, that seems to be a change introduced via https://svn.apache.org/viewvc?view=revision&revision=1849969 in https://bz.apache.org/bugzilla/show_bug.cgi?id=60845
I will take a closer look why the changed equals has such a side-effect. Thanks... Dominik. On Tue, Apr 21, 2020 at 5:47 AM shuai yuan <[email protected]> wrote: > dear: > apache poi setDiagonal is effective in poi 4.0.1 but not effective in > 4.1.0. i really want to know why. > > package org.quartz.core; > import java.io.FileOutputStream; > > import org.apache.poi.ss.usermodel.BorderStyle; > import org.apache.poi.ss.usermodel.Cell; > import org.apache.poi.ss.usermodel.CellStyle; > import org.apache.poi.ss.usermodel.Sheet; > import org.apache.poi.xssf.model.StylesTable; > import org.apache.poi.xssf.model.ThemesTable; > import org.apache.poi.xssf.streaming.SXSSFWorkbook; > import org.apache.poi.xssf.usermodel.XSSFCellStyle; > import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder; > import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder; > import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorderPr; > import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf; > import org.openxmlformats.schemas.spreadsheetml.x2006.main.STBorderStyle; > class CellDiagonalBorders { > private static CTBorder getCTBorder(StylesTable _stylesSource, CTXf > _cellXf) { > CTBorder ct; > if (_cellXf.getApplyBorder()) { > int idx = (int) _cellXf.getBorderId(); > XSSFCellBorder cf = _stylesSource.getBorderAt(idx); > ct = (CTBorder) cf.getCTBorder().copy(); > } else { > ct = CTBorder.Factory.newInstance(); > } > return ct; > } > public static void setBorderDiagonal(BorderStyle border, StylesTable > _stylesSource, CTXf _cellXf, > ThemesTable _theme) { > CTBorder ct = getCTBorder(_stylesSource, _cellXf); > CTBorderPr pr = ct.isSetDiagonal() ? ct.getDiagonal() : > ct.addNewDiagonal(); > if (border == BorderStyle.NONE) { > ct.unsetDiagonal(); > } else { > ct.setDiagonalUp(true); > pr.setStyle(STBorderStyle.Enum.forInt(border.getCode()+1)); > } > int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme, > _stylesSource.getIndexedColors())); > System.out.println(idx); > _cellXf.setBorderId(idx); > _cellXf.setApplyBorder(true); > } > public static void main(String[] args) throws Exception { > SXSSFWorkbook wb = new SXSSFWorkbook(SXSSFWorkbook.DEFAULT_WINDOW_SIZE); > CellStyle style = wb.createCellStyle(); > style.setBorderTop(BorderStyle.THICK); > style.setBorderBottom(BorderStyle.THICK); > StylesTable _stylesSource = ((SXSSFWorkbook) > wb).getXSSFWorkbook().getStylesSource(); > if (_stylesSource != null) { > ThemesTable _theme = _stylesSource.getTheme(); > CTXf _cellXf = ((XSSFCellStyle) style).getCoreXf(); > setBorderDiagonal(BorderStyle.THICK, _stylesSource, _cellXf, _theme); > } > style.setBorderLeft(BorderStyle.THICK); > style.setBorderRight(BorderStyle.THICK); > Sheet sheet = wb.createSheet("Sheet1"); > Cell cell = sheet.createRow(1).createCell(2); > cell.setCellStyle(style); > FileOutputStream fileOut = new > FileOutputStream("CellDiagonalBorders.xlsx"); > wb.write(fileOut); > wb.close(); > if (wb instanceof SXSSFWorkbook) > ((SXSSFWorkbook) wb).dispose(); > } > } >
