}
final CellStyle cellStyle = cell.getCellStyle();
final short fontIndex = cellStyle.getFontIndex();
final Font font = workbook.getFontAt(fontIndex);
final StyleBuilder styleBuilder = new StyleBuilder();
// Font bold, italic, underline
if (font.getBoldweight() >= Font.BOLDWEIGHT_BOLD) {
styleBuilder.bold();
}
if (font.getItalic()) {
styleBuilder.italic();
}
if (font.getUnderline() != FontUnderline.NONE.getByteValue()) {
styleBuilder.underline();
}
// Font size
final Font stdFont = workbook.getFontAt((short) 0);
final short fontSize = font.getFontHeightInPoints();
if (stdFont.getFontHeightInPoints() != fontSize) {
styleBuilder.fontSize(fontSize, SizeUnit.PT);
}
// Font color
final short colorIndex = font.getColor();
if (font instanceof HSSFFont) {
if (colorIndex != HSSFFont.COLOR_NORMAL) {
final HSSFWorkbook wb = (HSSFWorkbook) workbook;
HSSFColor color = wb.getCustomPalette().getColor(colorIndex);
if (color != null) {
short[] triplet = color.getTriplet();
styleBuilder.foreground(triplet);
}
}
} else if (font instanceof XSSFFont) {
XSSFFont xssfFont = (XSSFFont) font;
XSSFColor color = xssfFont.getXSSFColor();
if (color != null) {
String argbHex = color.getARGBHex();
if (argbHex != null) {
styleBuilder.foreground(argbHex.substring(2));
}
}
} else {
throw new IllegalStateException("Unexpected font type: " + (font == null ? "null" : font.getClass()) + ")");
}
// Background color
if (cellStyle.getFillPattern() == 1) {
Color color = cellStyle.getFillForegroundColorColor();
if (color instanceof HSSFColor) {
short[] triplet = ((HSSFColor) color).getTriplet();
if (triplet != null) {
styleBuilder.background(triplet);
}
} else if (color instanceof XSSFColor) {
String argb = ((XSSFColor) color).getARGBHex();
if (argb != null) {
styleBuilder.background(argb.substring(2));
}
} else {
throw new IllegalStateException("Unexpected color type: " + (color == null ? "null" : color.getClass()) + ")");
}
}
// alignment
switch (cellStyle.getAlignment()) {
case CellStyle.ALIGN_LEFT:
styleBuilder.leftAligned();
break;
case CellStyle.ALIGN_RIGHT:
styleBuilder.rightAligned();
break;
case CellStyle.ALIGN_CENTER:
styleBuilder.centerAligned();
break;
case CellStyle.ALIGN_JUSTIFY:
styleBuilder.justifyAligned();
break;
}
return styleBuilder.create();
}