Apache POI: RegionUtil XSSF Выбор пограничного цвета для объединенных областей (на основе awt.Color)? - PullRequest
0 голосов
/ 18 января 2019

В настоящее время я добавляю объединенные регионы в мои xlsx файлы, используя Apache POI. Я использую RegionUtil для создания границ для объединенных ячеек, охватывающих несколько столбцов и строк.

Часть, касающаяся выбора правильного стиля рамки, работает нормально, но сам цвет является черным (вместо ожидаемого серого из ввода awt.Color). API упоминает только цвет int, я ошибочно полагаю, что они означают индекс: https://poi.apache.org/apidocs/dev/org/apache/poi/ss/util/RegionUtil.html

Как мне указать правильное значение int (на основе моего ввода awt.Color), чтобы цвет границы был таким же, как в моем обычном стиле ячейки?

Код для настройки объединенных границ

private void setBordersToMergedCells(XSSFSheet in_sheet, java.awt.Color in_bordercolor) {
    int numMerged = in_sheet.getNumMergedRegions();

    for (int i = 0; i < numMerged; i++) {
        //this works
        CellRangeAddress mergedRegions = in_sheet.getMergedRegion(i);
        RegionUtil.setBorderLeft(BorderStyle.THIN, mergedRegions, in_sheet);
        RegionUtil.setBorderRight(BorderStyle.THIN, mergedRegions, in_sheet);
        RegionUtil.setBorderTop(BorderStyle.THIN, mergedRegions, in_sheet);
        RegionUtil.setBorderBottom(BorderStyle.THIN, mergedRegions, in_sheet);
        //this does not work
        RegionUtil.setLeftBorderColor(new XSSFColor(in_bordercolor).getIndex(), mergedRegions, in_sheet);
        RegionUtil.setRightBorderColor(new XSSFColor(in_bordercolor).getIndex(), mergedRegions, in_sheet);
        RegionUtil.setTopBorderColor(new XSSFColor(in_bordercolor).getIndex(), mergedRegions, in_sheet);
        RegionUtil.setBottomBorderColor(new XSSFColor(in_bordercolor).getIndex(), mergedRegions, in_sheet);           
    }

Для сравнения, вот как я настроил свой стиль ячеек, используя (заданные) цвета AWT (отлично работает):

protected XSSFCellStyle createBorderedStyleXLSX(Workbook in_wb, java.awt.Color in_bordercolor) {
    XSSFCellStyle style = (XSSFCellStyle) in_wb.createCellStyle();
    style.setBorderTop(BorderStyle.THIN);
    style.setBorderBottom(BorderStyle.THIN);
    style.setBorderLeft(BorderStyle.THIN);
    style.setBorderRight(BorderStyle.THIN);
    style.setBorderColor(XSSFCellBorder.BorderSide.TOP, new XSSFColor(in_bordercolor));
    style.setBorderColor(XSSFCellBorder.BorderSide.BOTTOM, new XSSFColor(in_bordercolor));
    style.setBorderColor(XSSFCellBorder.BorderSide.LEFT, new XSSFColor(in_bordercolor));
    style.setBorderColor(XSSFCellBorder.BorderSide.RIGHT, new XSSFColor(in_bordercolor));
    return style;
}
...