В настоящее время я добавляю объединенные регионы в мои 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;
}