i'm currently adding merged regions to my xlsx
files using Apache POI
. I'm using the RegionUtil
to create borders for merged cells spanning multiple columns and rows.
The part about selecting the correct borderstyle works fine, but the color itself is a black (instead of the expected grey from the input awt.Color
). The API only mentions an int
color, i wrongly assumend they mean the index : https://poi.apache.org/apidocs/dev/org/apache/poi/ss/util/RegionUtil.html
How do i provide the correct int
value (based on my input awt.Color
)so the bordercolor is the same one as in my normal cellstyle?
Code for setting up the merged borders
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);
}
For comparison, here is how i set up my cellstyle using (given) awt colors (works perfectly):
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;
}