123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You 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 org.apache.poi.xssf.usermodel;
-
- import static org.apache.poi.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;
-
- import org.apache.poi.POIXMLException;
- import org.apache.poi.ss.usermodel.BorderStyle;
- import org.apache.poi.ss.usermodel.CellStyle;
- import org.apache.poi.ss.usermodel.FillPatternType;
- import org.apache.poi.ss.usermodel.Font;
- import org.apache.poi.ss.usermodel.HorizontalAlignment;
- import org.apache.poi.ss.usermodel.IndexedColors;
- import org.apache.poi.ss.usermodel.VerticalAlignment;
- import org.apache.poi.util.Internal;
- import org.apache.poi.xssf.model.StylesTable;
- import org.apache.poi.xssf.model.ThemesTable;
- import org.apache.poi.xssf.usermodel.extensions.XSSFCellAlignment;
- import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;
- import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide;
- import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill;
- import org.apache.xmlbeans.XmlException;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorderPr;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellAlignment;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPatternFill;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.STBorderStyle;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType;
-
-
- /**
- *
- * High level representation of the the possible formatting information for the contents of the cells on a sheet in a
- * SpreadsheetML document.
- *
- * @see org.apache.poi.xssf.usermodel.XSSFWorkbook#createCellStyle()
- * @see org.apache.poi.xssf.usermodel.XSSFWorkbook#getCellStyleAt(int)
- * @see org.apache.poi.xssf.usermodel.XSSFCell#setCellStyle(org.apache.poi.ss.usermodel.CellStyle)
- */
- public class XSSFCellStyle implements CellStyle {
-
- private int _cellXfId;
- private final StylesTable _stylesSource;
- private CTXf _cellXf;
- private final CTXf _cellStyleXf;
- private XSSFFont _font;
- private XSSFCellAlignment _cellAlignment;
- private ThemesTable _theme;
-
- /**
- * Creates a Cell Style from the supplied parts
- * @param cellXfId The main XF for the cell. Must be a valid 0-based index into the XF table
- * @param cellStyleXfId Optional, style xf. A value of <code>-1</code> means no xf.
- * @param stylesSource Styles Source to work off
- */
- public XSSFCellStyle(int cellXfId, int cellStyleXfId, StylesTable stylesSource, ThemesTable theme) {
- _cellXfId = cellXfId;
- _stylesSource = stylesSource;
- _cellXf = stylesSource.getCellXfAt(this._cellXfId);
- _cellStyleXf = cellStyleXfId == -1 ? null : stylesSource.getCellStyleXfAt(cellStyleXfId);
- _theme = theme;
- }
-
- /**
- * Used so that StylesSource can figure out our location
- */
- @Internal
- public CTXf getCoreXf() {
- return _cellXf;
- }
-
- /**
- * Used so that StylesSource can figure out our location
- */
- @Internal
- public CTXf getStyleXf() {
- return _cellStyleXf;
- }
-
- /**
- * Creates an empty Cell Style
- */
- public XSSFCellStyle(StylesTable stylesSource) {
- _stylesSource = stylesSource;
- // We need a new CTXf for the main styles
- // TODO decide on a style ctxf
- _cellXf = CTXf.Factory.newInstance();
- _cellStyleXf = null;
- }
-
- /**
- * Verifies that this style belongs to the supplied Workbook
- * Styles Source.
- * Will throw an exception if it belongs to a different one.
- * This is normally called when trying to assign a style to a
- * cell, to ensure the cell and the style are from the same
- * workbook (if they're not, it won't work)
- * @throws IllegalArgumentException if there's a workbook mis-match
- */
- public void verifyBelongsToStylesSource(StylesTable src) {
- if(this._stylesSource != src) {
- throw new IllegalArgumentException("This Style does not belong to the supplied Workbook Stlyes Source. Are you trying to assign a style from one workbook to the cell of a differnt workbook?");
- }
- }
-
- /**
- * Clones all the style information from another
- * XSSFCellStyle, onto this one. This
- * XSSFCellStyle will then have all the same
- * properties as the source, but the two may
- * be edited independently.
- * Any stylings on this XSSFCellStyle will be lost!
- *
- * The source XSSFCellStyle could be from another
- * XSSFWorkbook if you like. This allows you to
- * copy styles from one XSSFWorkbook to another.
- */
- @Override
- public void cloneStyleFrom(CellStyle source) {
- if(source instanceof XSSFCellStyle) {
- XSSFCellStyle src = (XSSFCellStyle)source;
-
- // Is it on our Workbook?
- if(src._stylesSource == _stylesSource) {
- // Nice and easy
- _cellXf.set(src.getCoreXf());
- _cellStyleXf.set(src.getStyleXf());
- } else {
- // Copy the style
- try {
- // Remove any children off the current style, to
- // avoid orphaned nodes
- if(_cellXf.isSetAlignment())
- _cellXf.unsetAlignment();
- if(_cellXf.isSetExtLst())
- _cellXf.unsetExtLst();
-
- // Create a new Xf with the same contents
- _cellXf = CTXf.Factory.parse(
- src.getCoreXf().toString(), DEFAULT_XML_OPTIONS
- );
-
- // bug 56295: ensure that the fills is available and set correctly
- CTFill fill = CTFill.Factory.parse(
- src.getCTFill().toString(), DEFAULT_XML_OPTIONS
- );
- addFill(fill);
-
- // bug 58084: set borders correctly
- CTBorder border = CTBorder.Factory.parse(
- src.getCTBorder().toString(), DEFAULT_XML_OPTIONS
- );
- addBorder(border);
-
- // Swap it over
- _stylesSource.replaceCellXfAt(_cellXfId, _cellXf);
- } catch(XmlException e) {
- throw new POIXMLException(e);
- }
-
- // Copy the format
- String fmt = src.getDataFormatString();
- setDataFormat(
- (new XSSFDataFormat(_stylesSource)).getFormat(fmt)
- );
-
- // Copy the font
- try {
- CTFont ctFont = CTFont.Factory.parse(
- src.getFont().getCTFont().toString(), DEFAULT_XML_OPTIONS
- );
- XSSFFont font = new XSSFFont(ctFont);
- font.registerTo(_stylesSource);
- setFont(font);
- } catch(XmlException e) {
- throw new POIXMLException(e);
- }
- }
-
- // Clear out cached details
- _font = null;
- _cellAlignment = null;
- } else {
- throw new IllegalArgumentException("Can only clone from one XSSFCellStyle to another, not between HSSFCellStyle and XSSFCellStyle");
- }
- }
-
- private void addFill(CTFill fill) {
- int idx = _stylesSource.putFill(new XSSFCellFill(fill));
-
- _cellXf.setFillId(idx);
- _cellXf.setApplyFill(true);
- }
-
- private void addBorder(CTBorder border) {
- int idx = _stylesSource.putBorder(new XSSFCellBorder(border, _theme));
-
- _cellXf.setBorderId(idx);
- _cellXf.setApplyBorder(true);
- }
-
- /**
- * Get the type of horizontal alignment for the cell
- *
- * @return short - the type of alignment
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_GENERAL
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_LEFT
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_CENTER
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_RIGHT
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_FILL
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_JUSTIFY
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_CENTER_SELECTION
- */
- @Override
- public short getAlignment() {
- return (short)(getAlignmentEnum().ordinal());
- }
-
- /**
- * Get the type of horizontal alignment for the cell
- *
- * @return HorizontalAlignment - the type of alignment
- * @see org.apache.poi.ss.usermodel.HorizontalAlignment
- */
- public HorizontalAlignment getAlignmentEnum() {
- CTCellAlignment align = _cellXf.getAlignment();
- if(align != null && align.isSetHorizontal()) {
- return HorizontalAlignment.values()[align.getHorizontal().intValue()-1];
- }
- return HorizontalAlignment.GENERAL;
- }
-
- /**
- * Get the type of border to use for the bottom border of the cell
- *
- * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE}
- */
- @Override
- public BorderStyle getBorderBottom() {
- if(!_cellXf.getApplyBorder()) return BorderStyle.NONE;
-
- int idx = (int)_cellXf.getBorderId();
- CTBorder ct = _stylesSource.getBorderAt(idx).getCTBorder();
- STBorderStyle.Enum ptrn = ct.isSetBottom() ? ct.getBottom().getStyle() : null;
- if (ptrn == null) {
- return BorderStyle.NONE;
- }
- return BorderStyle.valueOf((short)(ptrn.intValue() - 1));
- }
-
- /**
- * Get the type of border to use for the bottom border of the cell
- *
- * @return border type as Java enum
- * @deprecated 3.15 beta 1. Use {@link #getBorderBottom}
- */
- public BorderStyle getBorderBottomEnum() {
- return getBorderBottom();
- }
-
- /**
- * Get the type of border to use for the left border of the cell
- *
- * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE}
- */
- @Override
- public BorderStyle getBorderLeft() {
- if(!_cellXf.getApplyBorder()) return BorderStyle.NONE;
-
- int idx = (int)_cellXf.getBorderId();
- CTBorder ct = _stylesSource.getBorderAt(idx).getCTBorder();
- STBorderStyle.Enum ptrn = ct.isSetLeft() ? ct.getLeft().getStyle() : null;
- if (ptrn == null) {
- return BorderStyle.NONE;
- }
- return BorderStyle.valueOf((short)(ptrn.intValue() - 1));
- }
-
- /**
- * Get the type of border to use for the left border of the cell
- *
- * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE}
- * @deprecated 3.15 beta 1. Use {@link #getBorderLeft}
- */
- public BorderStyle getBorderLeftEnum() {
- return getBorderLeft();
- }
-
- /**
- * Get the type of border to use for the right border of the cell
- *
- * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE}
- */
- @Override
- public BorderStyle getBorderRight() {
- if(!_cellXf.getApplyBorder()) return BorderStyle.NONE;
-
- int idx = (int)_cellXf.getBorderId();
- CTBorder ct = _stylesSource.getBorderAt(idx).getCTBorder();
- STBorderStyle.Enum ptrn = ct.isSetRight() ? ct.getRight().getStyle() : null;
- if (ptrn == null) {
- return BorderStyle.NONE;
- }
- return BorderStyle.valueOf((short)(ptrn.intValue() - 1));
- }
-
- /**
- * Get the type of border to use for the right border of the cell
- *
- * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE}
- * @deprecated 3.15 beta 1. Use {@link #getBorderRight}
- */
- public BorderStyle getBorderRightEnum() {
- return getBorderRight();
- }
-
- /**
- * Get the type of border to use for the top border of the cell
- *
- * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE}
- */
- @Override
- public BorderStyle getBorderTop() {
- if(!_cellXf.getApplyBorder()) return BorderStyle.NONE;
-
- int idx = (int)_cellXf.getBorderId();
- CTBorder ct = _stylesSource.getBorderAt(idx).getCTBorder();
- STBorderStyle.Enum ptrn = ct.isSetTop() ? ct.getTop().getStyle() : null;
- if (ptrn == null) {
- return BorderStyle.NONE;
- }
- return BorderStyle.valueOf((short) (ptrn.intValue() - 1));
- }
-
- /**
- * Get the type of border to use for the top border of the cell
- *
- * @return border type, default value is {@link org.apache.poi.ss.usermodel.BorderStyle#NONE}
- * @deprecated 3.15 beta 1. Use {@link #getBorderTop}
- */
- public BorderStyle getBorderTopEnum() {
- return getBorderTop();
- }
-
- /**
- * Get the color to use for the bottom border
- * <br/>
- * Color is optional. When missing, IndexedColors.AUTOMATIC is implied.
- * @return the index of the color definition, default value is {@link org.apache.poi.ss.usermodel.IndexedColors#AUTOMATIC}
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public short getBottomBorderColor() {
- XSSFColor clr = getBottomBorderXSSFColor();
- return clr == null ? IndexedColors.BLACK.getIndex() : clr.getIndexed();
- }
-
- /**
- * Get the color to use for the bottom border as a {@link XSSFColor}
- *
- * @return the used color or <code>null</code> if not set
- */
- public XSSFColor getBottomBorderXSSFColor() {
- if(!_cellXf.getApplyBorder()) return null;
-
- int idx = (int)_cellXf.getBorderId();
- XSSFCellBorder border = _stylesSource.getBorderAt(idx);
-
- return border.getBorderColor(BorderSide.BOTTOM);
- }
-
- /**
- * Get the index of the number format (numFmt) record used by this cell format.
- *
- * @return the index of the number format
- */
- @Override
- public short getDataFormat() {
- return (short)_cellXf.getNumFmtId();
- }
-
- /**
- * Get the contents of the format string, by looking up
- * the StylesSource
- *
- * @return the number format string
- */
- @Override
- public String getDataFormatString() {
- int idx = getDataFormat();
- return new XSSFDataFormat(_stylesSource).getFormat((short)idx);
- }
-
- /**
- * Get the background fill color.
- * <p>
- * Note - many cells are actually filled with a foreground
- * fill, not a background fill - see {@link #getFillForegroundColor()}
- * </p>
- * @return fill color, default value is {@link org.apache.poi.ss.usermodel.IndexedColors#AUTOMATIC}
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public short getFillBackgroundColor() {
- XSSFColor clr = getFillBackgroundXSSFColor();
- return clr == null ? IndexedColors.AUTOMATIC.getIndex() : clr.getIndexed();
- }
-
- @Override
- public XSSFColor getFillBackgroundColorColor() {
- return getFillBackgroundXSSFColor();
- }
-
- /**
- * Get the background fill color.
- * <p>
- * Note - many cells are actually filled with a foreground
- * fill, not a background fill - see {@link #getFillForegroundColor()}
- * </p>
- * @see org.apache.poi.xssf.usermodel.XSSFColor#getRGB()
- * @return XSSFColor - fill color or <code>null</code> if not set
- */
- public XSSFColor getFillBackgroundXSSFColor() {
- // bug 56295: handle missing applyFill attribute as "true" because Excel does as well
- if(_cellXf.isSetApplyFill() && !_cellXf.getApplyFill()) return null;
-
- int fillIndex = (int)_cellXf.getFillId();
- XSSFCellFill fg = _stylesSource.getFillAt(fillIndex);
-
- XSSFColor fillBackgroundColor = fg.getFillBackgroundColor();
- if (fillBackgroundColor != null && _theme != null) {
- _theme.inheritFromThemeAsRequired(fillBackgroundColor);
- }
- return fillBackgroundColor;
- }
-
- /**
- * Get the foreground fill color.
- * <p>
- * Many cells are filled with this, instead of a
- * background color ({@link #getFillBackgroundColor()})
- * </p>
- * @see IndexedColors
- * @return fill color, default value is {@link org.apache.poi.ss.usermodel.IndexedColors#AUTOMATIC}
- */
- @Override
- public short getFillForegroundColor() {
- XSSFColor clr = getFillForegroundXSSFColor();
- return clr == null ? IndexedColors.AUTOMATIC.getIndex() : clr.getIndexed();
- }
-
- @Override
- public XSSFColor getFillForegroundColorColor() {
- return getFillForegroundXSSFColor();
- }
-
- /**
- * Get the foreground fill color.
- *
- * @return XSSFColor - fill color or <code>null</code> if not set
- */
- public XSSFColor getFillForegroundXSSFColor() {
- // bug 56295: handle missing applyFill attribute as "true" because Excel does as well
- if(_cellXf.isSetApplyFill() && !_cellXf.getApplyFill()) return null;
-
- int fillIndex = (int)_cellXf.getFillId();
- XSSFCellFill fg = _stylesSource.getFillAt(fillIndex);
-
- XSSFColor fillForegroundColor = fg.getFillForegroundColor();
- if (fillForegroundColor != null && _theme != null) {
- _theme.inheritFromThemeAsRequired(fillForegroundColor);
- }
- return fillForegroundColor;
- }
-
- /**
- * Get the fill pattern
- * @return fill pattern, default value is {@link org.apache.poi.ss.usermodel.CellStyle#NO_FILL}
- *
- * @see org.apache.poi.ss.usermodel.CellStyle#NO_FILL
- * @see org.apache.poi.ss.usermodel.CellStyle#SOLID_FOREGROUND
- * @see org.apache.poi.ss.usermodel.CellStyle#FINE_DOTS
- * @see org.apache.poi.ss.usermodel.CellStyle#ALT_BARS
- * @see org.apache.poi.ss.usermodel.CellStyle#SPARSE_DOTS
- * @see org.apache.poi.ss.usermodel.CellStyle#THICK_HORZ_BANDS
- * @see org.apache.poi.ss.usermodel.CellStyle#THICK_VERT_BANDS
- * @see org.apache.poi.ss.usermodel.CellStyle#THICK_BACKWARD_DIAG
- * @see org.apache.poi.ss.usermodel.CellStyle#THICK_FORWARD_DIAG
- * @see org.apache.poi.ss.usermodel.CellStyle#BIG_SPOTS
- * @see org.apache.poi.ss.usermodel.CellStyle#BRICKS
- * @see org.apache.poi.ss.usermodel.CellStyle#THIN_HORZ_BANDS
- * @see org.apache.poi.ss.usermodel.CellStyle#THIN_VERT_BANDS
- * @see org.apache.poi.ss.usermodel.CellStyle#THIN_BACKWARD_DIAG
- * @see org.apache.poi.ss.usermodel.CellStyle#THIN_FORWARD_DIAG
- * @see org.apache.poi.ss.usermodel.CellStyle#SQUARES
- * @see org.apache.poi.ss.usermodel.CellStyle#DIAMONDS
- */
- @Override
- public short getFillPattern() {
- // bug 56295: handle missing applyFill attribute as "true" because Excel does as well
- if(_cellXf.isSetApplyFill() && !_cellXf.getApplyFill()) return 0;
-
- int fillIndex = (int)_cellXf.getFillId();
- XSSFCellFill fill = _stylesSource.getFillAt(fillIndex);
-
- STPatternType.Enum ptrn = fill.getPatternType();
- if(ptrn == null) return CellStyle.NO_FILL;
- return (short)(ptrn.intValue() - 1);
- }
-
- /**
- * Get the fill pattern
- *
- * @return the fill pattern, default value is {@link org.apache.poi.ss.usermodel.FillPatternType#NO_FILL}
- */
- public FillPatternType getFillPatternEnum() {
- int style = getFillPattern();
- return FillPatternType.values()[style];
- }
-
- /**
- * Gets the font for this style
- * @return Font - font
- */
- public XSSFFont getFont() {
- if (_font == null) {
- _font = _stylesSource.getFontAt(getFontId());
- }
- return _font;
- }
-
- /**
- * Gets the index of the font for this style
- *
- * @return short - font index
- * @see org.apache.poi.xssf.usermodel.XSSFWorkbook#getFontAt(short)
- */
- @Override
- public short getFontIndex() {
- return (short) getFontId();
- }
-
- /**
- * Get whether the cell's using this style are to be hidden
- *
- * @return boolean - whether the cell using this style is hidden
- */
- @Override
- public boolean getHidden() {
- if (!_cellXf.isSetProtection() || !_cellXf.getProtection().isSetHidden()) {
- return false;
- }
- return _cellXf.getProtection().getHidden();
- }
-
- /**
- * Get the number of spaces to indent the text in the cell
- *
- * @return indent - number of spaces
- */
- @Override
- public short getIndention() {
- CTCellAlignment align = _cellXf.getAlignment();
- return (short)(align == null ? 0 : align.getIndent());
- }
-
- /**
- * Get the index within the StylesTable (sequence within the collection of CTXf elements)
- *
- * @return unique index number of the underlying record this style represents, as a short (may wrap)
- */
- @Override
- public short getIndex() {
- return (short)this._cellXfId;
- }
-
- /**
- * Workaround for places where we need to support more than 32767 cell styles, ideally
- * the main getIndex() and others would return int, not short, but that would affect some
- * public APIs
- *
- * @return unique index number of the underlying record this style represents, as an int (always positive)
- */
- protected int getUIndex() {
- return this._cellXfId;
- }
-
- /**
- * Get the color to use for the left border
- *
- * @return the index of the color definition, default value is {@link org.apache.poi.ss.usermodel.IndexedColors#BLACK}
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public short getLeftBorderColor() {
- XSSFColor clr = getLeftBorderXSSFColor();
- return clr == null ? IndexedColors.BLACK.getIndex() : clr.getIndexed();
- }
-
- /**
- * Get the color to use for the left border
- *
- * @return the index of the color definition or <code>null</code> if not set
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- public XSSFColor getLeftBorderXSSFColor() {
- if(!_cellXf.getApplyBorder()) return null;
-
- int idx = (int)_cellXf.getBorderId();
- XSSFCellBorder border = _stylesSource.getBorderAt(idx);
-
- return border.getBorderColor(BorderSide.LEFT);
- }
-
- /**
- * Get whether the cell's using this style are locked
- *
- * @return whether the cell using this style are locked
- */
- @Override
- public boolean getLocked() {
- if (!_cellXf.isSetProtection() || !_cellXf.getProtection().isSetLocked()) {
- return true;
- }
- return _cellXf.getProtection().getLocked();
- }
-
- /**
- * Get the color to use for the right border
- *
- * @return the index of the color definition, default value is {@link org.apache.poi.ss.usermodel.IndexedColors#BLACK}
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public short getRightBorderColor() {
- XSSFColor clr = getRightBorderXSSFColor();
- return clr == null ? IndexedColors.BLACK.getIndex() : clr.getIndexed();
- }
- /**
- * Get the color to use for the right border
- *
- * @return the used color or <code>null</code> if not set
- */
- public XSSFColor getRightBorderXSSFColor() {
- if(!_cellXf.getApplyBorder()) return null;
-
- int idx = (int)_cellXf.getBorderId();
- XSSFCellBorder border = _stylesSource.getBorderAt(idx);
-
- return border.getBorderColor(BorderSide.RIGHT);
- }
-
- /**
- * Get the degree of rotation for the text in the cell
- * <p>
- * Expressed in degrees. Values range from 0 to 180. The first letter of
- * the text is considered the center-point of the arc.
- * <br/>
- * For 0 - 90, the value represents degrees above horizon. For 91-180 the degrees below the
- * horizon is calculated as:
- * <br/>
- * <code>[degrees below horizon] = 90 - textRotation.</code>
- * </p>
- *
- * @return rotation degrees (between 0 and 180 degrees)
- */
- @Override
- public short getRotation() {
- CTCellAlignment align = _cellXf.getAlignment();
- return (short)(align == null ? 0 : align.getTextRotation());
- }
-
- @Override
- public boolean getShrinkToFit() {
- CTCellAlignment align = _cellXf.getAlignment();
- return align != null && align.getShrinkToFit();
- }
-
- /**
- * Get the color to use for the top border
- *
- * @return the index of the color definition, default value is {@link org.apache.poi.ss.usermodel.IndexedColors#BLACK}
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public short getTopBorderColor() {
- XSSFColor clr = getTopBorderXSSFColor();
- return clr == null ? IndexedColors.BLACK.getIndex() : clr.getIndexed();
- }
-
- /**
- * Get the color to use for the top border
- *
- * @return the used color or <code>null</code> if not set
- */
- public XSSFColor getTopBorderXSSFColor() {
- if(!_cellXf.getApplyBorder()) return null;
-
- int idx = (int)_cellXf.getBorderId();
- XSSFCellBorder border = _stylesSource.getBorderAt(idx);
-
- return border.getBorderColor(BorderSide.TOP);
- }
-
- /**
- * Get the type of vertical alignment for the cell
- *
- * @return align the type of alignment, default value is {@link org.apache.poi.ss.usermodel.CellStyle#VERTICAL_BOTTOM}
- * @see org.apache.poi.ss.usermodel.CellStyle#VERTICAL_TOP
- * @see org.apache.poi.ss.usermodel.CellStyle#VERTICAL_CENTER
- * @see org.apache.poi.ss.usermodel.CellStyle#VERTICAL_BOTTOM
- * @see org.apache.poi.ss.usermodel.CellStyle#VERTICAL_JUSTIFY
- */
- @Override
- public short getVerticalAlignment() {
- return (short) (getVerticalAlignmentEnum().ordinal());
- }
-
- /**
- * Get the type of vertical alignment for the cell
- *
- * @return the type of alignment, default value is {@link org.apache.poi.ss.usermodel.VerticalAlignment#BOTTOM}
- * @see org.apache.poi.ss.usermodel.VerticalAlignment
- */
- public VerticalAlignment getVerticalAlignmentEnum() {
- CTCellAlignment align = _cellXf.getAlignment();
- if(align != null && align.isSetVertical()) {
- return VerticalAlignment.values()[align.getVertical().intValue()-1];
- }
- return VerticalAlignment.BOTTOM;
- }
-
- /**
- * Whether the text should be wrapped
- *
- * @return a boolean value indicating if the text in a cell should be line-wrapped within the cell.
- */
- @Override
- public boolean getWrapText() {
- CTCellAlignment align = _cellXf.getAlignment();
- return align != null && align.getWrapText();
- }
-
- /**
- * Set the type of horizontal alignment for the cell
- *
- * @param align - the type of alignment
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_GENERAL
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_LEFT
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_CENTER
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_RIGHT
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_FILL
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_JUSTIFY
- * @see org.apache.poi.ss.usermodel.CellStyle#ALIGN_CENTER_SELECTION
- */
- @Override
- public void setAlignment(short align) {
- getCellAlignment().setHorizontal(HorizontalAlignment.values()[align]);
- }
-
- /**
- * Set the type of horizontal alignment for the cell
- *
- * @param align - the type of alignment
- * @see org.apache.poi.ss.usermodel.HorizontalAlignment
- */
- public void setAlignment(HorizontalAlignment align) {
- setAlignment((short)align.ordinal());
- }
-
- /**
- * Set the type of border to use for the bottom border of the cell
- *
- * @param border the type of border to use
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THIN
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASHED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOTTED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THICK
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOUBLE
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_HAIR
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASHED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT
- * @deprecated 3.15 beta 1
- */
- @Override
- public void setBorderBottom(short border) {
- CTBorder ct = getCTBorder();
- CTBorderPr pr = ct.isSetBottom() ? ct.getBottom() : ct.addNewBottom();
- if(border == BORDER_NONE) ct.unsetBottom();
- else pr.setStyle(STBorderStyle.Enum.forInt(border + 1));
-
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
-
- _cellXf.setBorderId(idx);
- _cellXf.setApplyBorder(true);
- }
-
- /**
- * Set the type of border to use for the bottom border of the cell
- *
- * @param border - type of border to use
- * @see org.apache.poi.ss.usermodel.BorderStyle
- */
- @Override
- public void setBorderBottom(BorderStyle border) {
- setBorderBottom(border.getCode());
- }
-
- /**
- * Set the type of border to use for the left border of the cell
- * @param border the type of border to use
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THIN
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASHED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOTTED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THICK
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOUBLE
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_HAIR
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASHED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT
- * @deprecated 3.15 beta 1
- */
- @Override
- public void setBorderLeft(short border) {
- CTBorder ct = getCTBorder();
- CTBorderPr pr = ct.isSetLeft() ? ct.getLeft() : ct.addNewLeft();
- if(border == BORDER_NONE) ct.unsetLeft();
- else pr.setStyle(STBorderStyle.Enum.forInt(border + 1));
-
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
-
- _cellXf.setBorderId(idx);
- _cellXf.setApplyBorder(true);
- }
-
- /**
- * Set the type of border to use for the left border of the cell
- *
- * @param border the type of border to use
- */
- @Override
- public void setBorderLeft(BorderStyle border) {
- setBorderLeft(border.getCode());
- }
-
- /**
- * Set the type of border to use for the right border of the cell
- *
- * @param border the type of border to use
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THIN
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASHED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOTTED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THICK
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOUBLE
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_HAIR
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASHED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT
- * @deprecated 3.15 beta 1
- */
- @Override
- public void setBorderRight(short border) {
- CTBorder ct = getCTBorder();
- CTBorderPr pr = ct.isSetRight() ? ct.getRight() : ct.addNewRight();
- if(border == BORDER_NONE) ct.unsetRight();
- else pr.setStyle(STBorderStyle.Enum.forInt(border + 1));
-
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
-
- _cellXf.setBorderId(idx);
- _cellXf.setApplyBorder(true);
- }
-
- /**
- * Set the type of border to use for the right border of the cell
- *
- * @param border the type of border to use
- */
- @Override
- public void setBorderRight(BorderStyle border) {
- setBorderRight(border.getCode());
- }
-
- /**
- * Set the type of border to use for the top border of the cell
- *
- * @param border the type of border to use
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_NONE
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THIN
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASHED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOTTED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_THICK
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DOUBLE
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_HAIR
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASHED
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_DASH_DOT_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_MEDIUM_DASH_DOT_DOT
- * @see org.apache.poi.ss.usermodel.CellStyle#BORDER_SLANTED_DASH_DOT
- * @deprecated 3.15 beta 1
- */
- @Override
- public void setBorderTop(short border) {
- CTBorder ct = getCTBorder();
- CTBorderPr pr = ct.isSetTop() ? ct.getTop() : ct.addNewTop();
- if(border == BORDER_NONE) ct.unsetTop();
- else pr.setStyle(STBorderStyle.Enum.forInt(border + 1));
-
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
-
- _cellXf.setBorderId(idx);
- _cellXf.setApplyBorder(true);
- }
-
- /**
- * Set the type of border to use for the top border of the cell
- *
- * @param border the type of border to use
- */
- @Override
- public void setBorderTop(BorderStyle border) {
- setBorderTop(border.getCode());
- }
-
- /**
- * Set the color to use for the bottom border
- * @param color the index of the color definition
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public void setBottomBorderColor(short color) {
- XSSFColor clr = new XSSFColor();
- clr.setIndexed(color);
- setBottomBorderColor(clr);
- }
-
- /**
- * Set the color to use for the bottom border
- *
- * @param color the color to use, null means no color
- */
- public void setBottomBorderColor(XSSFColor color) {
- CTBorder ct = getCTBorder();
- if(color == null && !ct.isSetBottom()) return;
-
- CTBorderPr pr = ct.isSetBottom() ? ct.getBottom() : ct.addNewBottom();
- if(color != null) pr.setColor(color.getCTColor());
- else pr.unsetColor();
-
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
-
- _cellXf.setBorderId(idx);
- _cellXf.setApplyBorder(true);
- }
-
- /**
- * Set the index of a data format
- *
- * @param fmt the index of a data format
- */
- @Override
- public void setDataFormat(short fmt) {
- // XSSF supports >32,767 formats
- setDataFormat(fmt&0xffff);
- }
- /**
- * Set the index of a data format
- *
- * @param fmt the index of a data format
- */
- public void setDataFormat(int fmt) {
- _cellXf.setApplyNumberFormat(true);
- _cellXf.setNumFmtId(fmt);
- }
-
- /**
- * Set the background fill color represented as a {@link XSSFColor} value.
- * <p>
- * For example:
- * <pre>
- * cs.setFillPattern(XSSFCellStyle.FINE_DOTS );
- * cs.setFillBackgroundXSSFColor(new XSSFColor(java.awt.Color.RED));
- * </pre>
- * optionally a Foreground and background fill can be applied:
- * <i>Note: Ensure Foreground color is set prior to background</i>
- * <pre>
- * cs.setFillPattern(XSSFCellStyle.FINE_DOTS );
- * cs.setFillForegroundColor(new XSSFColor(java.awt.Color.BLUE));
- * cs.setFillBackgroundColor(new XSSFColor(java.awt.Color.GREEN));
- * </pre>
- * or, for the special case of SOLID_FILL:
- * <pre>
- * cs.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND );
- * cs.setFillForegroundColor(new XSSFColor(java.awt.Color.GREEN));
- * </pre>
- * It is necessary to set the fill style in order
- * for the color to be shown in the cell.
- *
- * @param color - the color to use
- */
- public void setFillBackgroundColor(XSSFColor color) {
- CTFill ct = getCTFill();
- CTPatternFill ptrn = ct.getPatternFill();
- if(color == null) {
- if(ptrn != null && ptrn.isSetBgColor()) ptrn.unsetBgColor();
- } else {
- if(ptrn == null) ptrn = ct.addNewPatternFill();
- ptrn.setBgColor(color.getCTColor());
- }
-
- addFill(ct);
- }
-
- /**
- * Set the background fill color represented as a indexed color value.
- * <p>
- * For example:
- * <pre>
- * cs.setFillPattern(XSSFCellStyle.FINE_DOTS );
- * cs.setFillBackgroundXSSFColor(IndexedColors.RED.getIndex());
- * </pre>
- * optionally a Foreground and background fill can be applied:
- * <i>Note: Ensure Foreground color is set prior to background</i>
- * <pre>
- * cs.setFillPattern(XSSFCellStyle.FINE_DOTS );
- * cs.setFillForegroundColor(IndexedColors.BLUE.getIndex());
- * cs.setFillBackgroundColor(IndexedColors.RED.getIndex());
- * </pre>
- * or, for the special case of SOLID_FILL:
- * <pre>
- * cs.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND );
- * cs.setFillForegroundColor(IndexedColors.RED.getIndex());
- * </pre>
- * It is necessary to set the fill style in order
- * for the color to be shown in the cell.
- *
- * @param bg - the color to use
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public void setFillBackgroundColor(short bg) {
- XSSFColor clr = new XSSFColor();
- clr.setIndexed(bg);
- setFillBackgroundColor(clr);
- }
-
- /**
- * Set the foreground fill color represented as a {@link XSSFColor} value.
- * <br/>
- * <i>Note: Ensure Foreground color is set prior to background color.</i>
- * @param color the color to use
- * @see #setFillBackgroundColor(org.apache.poi.xssf.usermodel.XSSFColor) )
- */
- public void setFillForegroundColor(XSSFColor color) {
- CTFill ct = getCTFill();
-
- CTPatternFill ptrn = ct.getPatternFill();
- if(color == null) {
- if(ptrn != null && ptrn.isSetFgColor()) ptrn.unsetFgColor();
- } else {
- if(ptrn == null) ptrn = ct.addNewPatternFill();
- ptrn.setFgColor(color.getCTColor());
- }
-
- addFill(ct);
- }
-
- /**
- * Set the foreground fill color as a indexed color value
- * <br/>
- * <i>Note: Ensure Foreground color is set prior to background color.</i>
- * @param fg the color to use
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public void setFillForegroundColor(short fg) {
- XSSFColor clr = new XSSFColor();
- clr.setIndexed(fg);
- setFillForegroundColor(clr);
- }
-
- /**
- * Get a <b>copy</b> of the currently used CTFill, if none is used, return a new instance.
- */
- private CTFill getCTFill(){
- CTFill ct;
- // bug 56295: handle missing applyFill attribute as "true" because Excel does as well
- if(!_cellXf.isSetApplyFill() || _cellXf.getApplyFill()) {
- int fillIndex = (int)_cellXf.getFillId();
- XSSFCellFill cf = _stylesSource.getFillAt(fillIndex);
-
- ct = (CTFill)cf.getCTFill().copy();
- } else {
- ct = CTFill.Factory.newInstance();
- }
- return ct;
- }
-
- /**
- * Get a <b>copy</b> of the currently used CTBorder, if none is used, return a new instance.
- */
- private CTBorder getCTBorder(){
- CTBorder ct;
- if(_cellXf.getApplyBorder()) {
- int idx = (int)_cellXf.getBorderId();
- XSSFCellBorder cf = _stylesSource.getBorderAt(idx);
-
- ct = (CTBorder)cf.getCTBorder().copy();
- } else {
- ct = CTBorder.Factory.newInstance();
- }
- return ct;
- }
-
- /**
- * This element is used to specify cell fill information for pattern and solid color cell fills.
- * For solid cell fills (no pattern), foregorund color is used.
- * For cell fills with patterns specified, then the cell fill color is specified by the background color.
- *
- * @see org.apache.poi.ss.usermodel.CellStyle#NO_FILL
- * @see org.apache.poi.ss.usermodel.CellStyle#SOLID_FOREGROUND
- * @see org.apache.poi.ss.usermodel.CellStyle#FINE_DOTS
- * @see org.apache.poi.ss.usermodel.CellStyle#ALT_BARS
- * @see org.apache.poi.ss.usermodel.CellStyle#SPARSE_DOTS
- * @see org.apache.poi.ss.usermodel.CellStyle#THICK_HORZ_BANDS
- * @see org.apache.poi.ss.usermodel.CellStyle#THICK_VERT_BANDS
- * @see org.apache.poi.ss.usermodel.CellStyle#THICK_BACKWARD_DIAG
- * @see org.apache.poi.ss.usermodel.CellStyle#THICK_FORWARD_DIAG
- * @see org.apache.poi.ss.usermodel.CellStyle#BIG_SPOTS
- * @see org.apache.poi.ss.usermodel.CellStyle#BRICKS
- * @see org.apache.poi.ss.usermodel.CellStyle#THIN_HORZ_BANDS
- * @see org.apache.poi.ss.usermodel.CellStyle#THIN_VERT_BANDS
- * @see org.apache.poi.ss.usermodel.CellStyle#THIN_BACKWARD_DIAG
- * @see org.apache.poi.ss.usermodel.CellStyle#THIN_FORWARD_DIAG
- * @see org.apache.poi.ss.usermodel.CellStyle#SQUARES
- * @see org.apache.poi.ss.usermodel.CellStyle#DIAMONDS
- * @see #setFillBackgroundColor(short)
- * @see #setFillForegroundColor(short)
- * @param fp fill pattern (set to {@link org.apache.poi.ss.usermodel.CellStyle#SOLID_FOREGROUND} to fill w/foreground color)
- */
- @Override
- public void setFillPattern(short fp) {
- CTFill ct = getCTFill();
- CTPatternFill ptrn = ct.isSetPatternFill() ? ct.getPatternFill() : ct.addNewPatternFill();
- if(fp == NO_FILL && ptrn.isSetPatternType()) ptrn.unsetPatternType();
- else ptrn.setPatternType(STPatternType.Enum.forInt(fp + 1));
-
- addFill(ct);
- }
-
- /**
- * This element is used to specify cell fill information for pattern and solid color cell fills. For solid cell fills (no pattern),
- * foreground color is used is used. For cell fills with patterns specified, then the cell fill color is specified by the background color element.
- *
- * @param ptrn the fill pattern to use
- * @see #setFillBackgroundColor(short)
- * @see #setFillForegroundColor(short)
- * @see org.apache.poi.ss.usermodel.FillPatternType
- */
- public void setFillPattern(FillPatternType ptrn) {
- setFillPattern((short)ptrn.ordinal());
- }
-
- /**
- * Set the font for this style
- *
- * @param font a font object created or retreived from the XSSFWorkbook object
- * @see org.apache.poi.xssf.usermodel.XSSFWorkbook#createFont()
- * @see org.apache.poi.xssf.usermodel.XSSFWorkbook#getFontAt(short)
- */
- @Override
- public void setFont(Font font) {
- if(font != null){
- long index = font.getIndex();
- this._cellXf.setFontId(index);
- this._cellXf.setApplyFont(true);
- } else {
- this._cellXf.setApplyFont(false);
- }
- }
-
- /**
- * Set the cell's using this style to be hidden
- *
- * @param hidden - whether the cell using this style should be hidden
- */
- @Override
- public void setHidden(boolean hidden) {
- if (!_cellXf.isSetProtection()) {
- _cellXf.addNewProtection();
- }
- _cellXf.getProtection().setHidden(hidden);
- }
-
- /**
- * Set the number of spaces to indent the text in the cell
- *
- * @param indent - number of spaces
- */
- @Override
- public void setIndention(short indent) {
- getCellAlignment().setIndent(indent);
- }
-
- /**
- * Set the color to use for the left border as a indexed color value
- *
- * @param color the index of the color definition
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public void setLeftBorderColor(short color) {
- XSSFColor clr = new XSSFColor();
- clr.setIndexed(color);
- setLeftBorderColor(clr);
- }
-
- /**
- * Set the color to use for the left border as a {@link XSSFColor} value
- *
- * @param color the color to use
- */
- public void setLeftBorderColor(XSSFColor color) {
- CTBorder ct = getCTBorder();
- if(color == null && !ct.isSetLeft()) return;
-
- CTBorderPr pr = ct.isSetLeft() ? ct.getLeft() : ct.addNewLeft();
- if(color != null) pr.setColor(color.getCTColor());
- else pr.unsetColor();
-
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
-
- _cellXf.setBorderId(idx);
- _cellXf.setApplyBorder(true);
- }
-
- /**
- * Set the cell's using this style to be locked
- *
- * @param locked - whether the cell using this style should be locked
- */
- @Override
- public void setLocked(boolean locked) {
- if (!_cellXf.isSetProtection()) {
- _cellXf.addNewProtection();
- }
- _cellXf.getProtection().setLocked(locked);
- }
-
- /**
- * Set the color to use for the right border
- *
- * @param color the index of the color definition
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public void setRightBorderColor(short color) {
- XSSFColor clr = new XSSFColor();
- clr.setIndexed(color);
- setRightBorderColor(clr);
- }
-
- /**
- * Set the color to use for the right border as a {@link XSSFColor} value
- *
- * @param color the color to use
- */
- public void setRightBorderColor(XSSFColor color) {
- CTBorder ct = getCTBorder();
- if(color == null && !ct.isSetRight()) return;
-
- CTBorderPr pr = ct.isSetRight() ? ct.getRight() : ct.addNewRight();
- if(color != null) pr.setColor(color.getCTColor());
- else pr.unsetColor();
-
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
-
- _cellXf.setBorderId(idx);
- _cellXf.setApplyBorder(true);
- }
-
- /**
- * Set the degree of rotation for the text in the cell
- * <p>
- * Expressed in degrees. Values range from 0 to 180. The first letter of
- * the text is considered the center-point of the arc.
- * <br/>
- * For 0 - 90, the value represents degrees above horizon. For 91-180 the degrees below the
- * horizon is calculated as:
- * <br/>
- * <code>[degrees below horizon] = 90 - textRotation.</code>
- * </p>
- *
- * Note: HSSF uses values from -90 to 90 degrees, whereas XSSF
- * uses values from 0 to 180 degrees. The implementations of this method will map between these two value-ranges
- * accordingly, however the corresponding getter is returning values in the range mandated by the current type
- * of Excel file-format that this CellStyle is applied to.
- *
- * @param rotation - the rotation degrees (between 0 and 180 degrees)
- */
- @Override
- public void setRotation(short rotation) {
- getCellAlignment().setTextRotation(rotation);
- }
-
-
- /**
- * Set the color to use for the top border
- *
- * @param color the index of the color definition
- * @see org.apache.poi.ss.usermodel.IndexedColors
- */
- @Override
- public void setTopBorderColor(short color) {
- XSSFColor clr = new XSSFColor();
- clr.setIndexed(color);
- setTopBorderColor(clr);
- }
-
- /**
- * Set the color to use for the top border as a {@link XSSFColor} value
- *
- * @param color the color to use
- */
- public void setTopBorderColor(XSSFColor color) {
- CTBorder ct = getCTBorder();
- if(color == null && !ct.isSetTop()) return;
-
- CTBorderPr pr = ct.isSetTop() ? ct.getTop() : ct.addNewTop();
- if(color != null) pr.setColor(color.getCTColor());
- else pr.unsetColor();
-
- int idx = _stylesSource.putBorder(new XSSFCellBorder(ct, _theme));
-
- _cellXf.setBorderId(idx);
- _cellXf.setApplyBorder(true);
- }
-
- /**
- * Set the type of vertical alignment for the cell
- *
- * @param align - align the type of alignment
- * @see org.apache.poi.ss.usermodel.CellStyle#VERTICAL_TOP
- * @see org.apache.poi.ss.usermodel.CellStyle#VERTICAL_CENTER
- * @see org.apache.poi.ss.usermodel.CellStyle#VERTICAL_BOTTOM
- * @see org.apache.poi.ss.usermodel.CellStyle#VERTICAL_JUSTIFY
- * @see org.apache.poi.ss.usermodel.VerticalAlignment
- */
- @Override
- public void setVerticalAlignment(short align) {
- getCellAlignment().setVertical(VerticalAlignment.values()[align]);
- }
-
- /**
- * Set the type of vertical alignment for the cell
- *
- * @param align - the type of alignment
- */
- public void setVerticalAlignment(VerticalAlignment align) {
- getCellAlignment().setVertical(align);
- }
-
- /**
- * Set whether the text should be wrapped.
- * <p>
- * Setting this flag to <code>true</code> make all content visible
- * whithin a cell by displaying it on multiple lines
- * </p>
- *
- * @param wrapped a boolean value indicating if the text in a cell should be line-wrapped within the cell.
- */
- @Override
- public void setWrapText(boolean wrapped) {
- getCellAlignment().setWrapText(wrapped);
- }
-
- /**
- * Gets border color
- *
- * @param side the border side
- * @return the used color
- */
- public XSSFColor getBorderColor(BorderSide side) {
- switch(side){
- case BOTTOM:
- return getBottomBorderXSSFColor();
- case RIGHT:
- return getRightBorderXSSFColor();
- case TOP:
- return getTopBorderXSSFColor();
- case LEFT:
- return getLeftBorderXSSFColor();
- default:
- throw new IllegalArgumentException("Unknown border: " + side);
- }
- }
-
- /**
- * Set the color to use for the selected border
- *
- * @param side - where to apply the color definition
- * @param color - the color to use
- */
- public void setBorderColor(BorderSide side, XSSFColor color) {
- switch(side){
- case BOTTOM:
- setBottomBorderColor(color);
- break;
- case RIGHT:
- setRightBorderColor(color);
- break;
- case TOP:
- setTopBorderColor(color);
- break;
- case LEFT:
- setLeftBorderColor(color);
- break;
- }
- }
-
- @Override
- public void setShrinkToFit(boolean shrinkToFit) {
- getCellAlignment().setShrinkToFit(shrinkToFit);
- }
-
- private int getFontId() {
- if (_cellXf.isSetFontId()) {
- return (int) _cellXf.getFontId();
- }
- return (int) _cellStyleXf.getFontId();
- }
-
- /**
- * get the cellAlignment object to use for manage alignment
- * @return XSSFCellAlignment - cell alignment
- */
- protected XSSFCellAlignment getCellAlignment() {
- if (this._cellAlignment == null) {
- this._cellAlignment = new XSSFCellAlignment(getCTCellAlignment());
- }
- return this._cellAlignment;
- }
-
- /**
- * Return the CTCellAlignment instance for alignment
- *
- * @return CTCellAlignment
- */
- private CTCellAlignment getCTCellAlignment() {
- if (_cellXf.getAlignment() == null) {
- _cellXf.setAlignment(CTCellAlignment.Factory.newInstance());
- }
- return _cellXf.getAlignment();
- }
-
- /**
- * Returns a hash code value for the object. The hash is derived from the underlying CTXf bean.
- *
- * @return the hash code value for this style
- */
- @Override
- public int hashCode(){
- return _cellXf.toString().hashCode();
- }
-
- /**
- * Checks is the supplied style is equal to this style
- *
- * @param o the style to check
- * @return true if the supplied style is equal to this style
- */
- @Override
- public boolean equals(Object o){
- if(o == null || !(o instanceof XSSFCellStyle)) return false;
-
- XSSFCellStyle cf = (XSSFCellStyle)o;
- return _cellXf.toString().equals(cf.getCoreXf().toString());
- }
-
- /**
- * Make a copy of this style. The underlying CTXf bean is cloned,
- * the references to fills and borders remain.
- *
- * @return a copy of this style
- */
- @Override
- public Object clone(){
- CTXf xf = (CTXf)_cellXf.copy();
-
- int xfSize = _stylesSource._getStyleXfsSize();
- int indexXf = _stylesSource.putCellXf(xf);
- return new XSSFCellStyle(indexXf-1, xfSize-1, _stylesSource, _theme);
- }
- }
|