Java tutorial
/* * Copyright (c) 2012-2013, bad robot (london) ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package bad.robot.excel.style; import bad.robot.excel.cell.DataFormat; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Workbook; import static bad.robot.excel.style.ClonedStyleFactory.newStyleBasedOn; import static org.apache.poi.ss.usermodel.CellStyle.SOLID_FOREGROUND; public class ReplaceExistingStyle implements Style { private final DataFormat format; private final Alignment alignment; private final FontSize fontSize; private final FontColour fontColour; private final Fill fill; private final Border border; /** * package protected. use {@link bad.robot.excel.style.StyleBuilder} instead */ ReplaceExistingStyle(Border border, DataFormat format, Alignment alignment, FontSize fontSize, FontColour fontColour, Fill fill) { this.border = border; this.format = format; this.alignment = alignment; this.fontSize = fontSize; this.fontColour = fontColour; this.fill = fill; } @Override public void applyTo(org.apache.poi.ss.usermodel.Cell cell, Workbook workbook) { CellStyle style = newStyleBasedOn(cell).create(workbook); applyBorderTo(style); applyFillTo(style); applyAlignmentTo(style); applyDataFormatTo(style, workbook); applyFontTo(style, workbook); cell.setCellStyle(style); } private void applyBorderTo(CellStyle style) { if (border != null) { style.setBorderBottom(border.getBottom().value().getPoiStyle()); style.setBorderTop(border.getTop().value().getPoiStyle()); style.setBorderRight(border.getRight().value().getPoiStyle()); style.setBorderLeft(border.getLeft().value().getPoiStyle()); } } private void applyFillTo(CellStyle style) { if (fill != null) { style.setFillPattern(SOLID_FOREGROUND); style.setFillForegroundColor(fill.getForegroundColour().value().getPoiStyle()); } } private void applyAlignmentTo(CellStyle style) { if (alignment != null) style.setAlignment(alignment.value().getPoiStyle()); } private void applyDataFormatTo(CellStyle style, Workbook workbook) { if (format != null) style.setDataFormat(workbook.createDataFormat().getFormat(format.value())); } private void applyFontTo(CellStyle style, Workbook workbook) { if (fontSize != null) { Font font = workbook.createFont(); font.setFontHeightInPoints(fontSize.value()); font.setColor(fontColour.value().getPoiStyle()); style.setFont(font); } else { // doesn't work Font existing = workbook.getFontAt(style.getFontIndex()); existing.setColor(fontColour.value().getPoiStyle()); style.setFont(existing); } } }