123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945 |
- /* ====================================================================
- 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.hssf.usermodel;
-
- import java.util.List;
-
- import org.apache.poi.hssf.model.InternalWorkbook;
- import org.apache.poi.hssf.record.ExtendedFormatRecord;
- import org.apache.poi.hssf.record.FontRecord;
- import org.apache.poi.hssf.record.FormatRecord;
- import org.apache.poi.hssf.record.StyleRecord;
- import org.apache.poi.hssf.util.HSSFColor;
- import org.apache.poi.ss.usermodel.CellStyle;
- import org.apache.poi.ss.usermodel.Font;
-
- /**
- * High level representation of the style of a cell in a sheet of a workbook.
- *
- * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#createCellStyle()
- * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#getCellStyleAt(short)
- * @see org.apache.poi.hssf.usermodel.HSSFCell#setCellStyle(HSSFCellStyle)
- */
- public final class HSSFCellStyle implements CellStyle {
- private ExtendedFormatRecord _format = null;
- private short _index = 0;
- private InternalWorkbook _workbook = null;
-
-
- /** Creates new HSSFCellStyle why would you want to do this?? */
- protected HSSFCellStyle(short index, ExtendedFormatRecord rec, HSSFWorkbook workbook)
- {
- this(index, rec, workbook.getWorkbook());
- }
- protected HSSFCellStyle(short index, ExtendedFormatRecord rec, InternalWorkbook workbook)
- {
- _workbook = workbook;
- _index = index;
- _format = rec;
- }
-
- /**
- * get the index within the HSSFWorkbook (sequence within the collection of ExtnededFormat objects)
- * @return unique index number of the underlying record this style represents (probably you don't care
- * unless you're comparing which one is which)
- */
- public short getIndex()
- {
- return _index;
- }
-
- /**
- * Return the parent style for this cell style.
- * In most cases this will be null, but in a few
- * cases there'll be a fully defined parent.
- */
- public HSSFCellStyle getParentStyle() {
- short parentIndex = _format.getParentIndex();
- // parentIndex equal 0xFFF indicates no inheritance from a cell style XF (See 2.4.353 XF)
- if(parentIndex == 0 || parentIndex == 0xFFF) {
- return null;
- }
- return new HSSFCellStyle(
- parentIndex,
- _workbook.getExFormatAt(parentIndex),
- _workbook
- );
- }
-
- /**
- * set the data format (must be a valid format)
- * @see org.apache.poi.hssf.usermodel.HSSFDataFormat
- */
- public void setDataFormat(short fmt)
- {
- _format.setFormatIndex(fmt);
- }
-
- /**
- * get the index of the format
- * @see org.apache.poi.hssf.usermodel.HSSFDataFormat
- */
-
- public short getDataFormat()
- {
- return _format.getFormatIndex();
- }
-
- // we keep the cached data in ThreadLocal members in order to
- // avoid multi-threading issues when different workbooks are accessed in
- // multiple threads at the same time
- private static ThreadLocal<Short> lastDateFormat = new ThreadLocal<Short>() {
- protected Short initialValue() {
- return Short.MIN_VALUE;
- }
- };
- private static ThreadLocal<List<FormatRecord>> lastFormats = new ThreadLocal<List<FormatRecord>>();
- private static ThreadLocal<String> getDataFormatStringCache = new ThreadLocal<String>();
-
- /**
- * Get the contents of the format string, by looking up
- * the DataFormat against the bound workbook
- * @see org.apache.poi.hssf.usermodel.HSSFDataFormat
- * @return the format string or "General" if not found
- */
- public String getDataFormatString() {
- if (getDataFormatStringCache.get() != null) {
- if (lastDateFormat.get() == getDataFormat() && _workbook.getFormats().equals(lastFormats.get())) {
- return getDataFormatStringCache.get();
- }
- }
-
- lastFormats.set(_workbook.getFormats());
- lastDateFormat.set(getDataFormat());
-
- getDataFormatStringCache.set(getDataFormatString(_workbook));
-
- return getDataFormatStringCache.get();
- }
-
- /**
- * Get the contents of the format string, by looking up
- * the DataFormat against the supplied workbook
- * @see org.apache.poi.hssf.usermodel.HSSFDataFormat
- *
- * @return the format string or "General" if not found
- */
- public String getDataFormatString(org.apache.poi.ss.usermodel.Workbook workbook) {
- HSSFDataFormat format = new HSSFDataFormat( ((HSSFWorkbook)workbook).getWorkbook() );
-
- int idx = getDataFormat();
- return idx == -1 ? "General" : format.getFormat(getDataFormat());
- }
- /**
- * Get the contents of the format string, by looking up
- * the DataFormat against the supplied low level workbook
- * @see org.apache.poi.hssf.usermodel.HSSFDataFormat
- */
- public String getDataFormatString(org.apache.poi.hssf.model.InternalWorkbook workbook) {
- HSSFDataFormat format = new HSSFDataFormat( workbook );
-
- return format.getFormat(getDataFormat());
- }
-
- /**
- * set the font for this style
- * @param font a font object created or retreived from the HSSFWorkbook object
- * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#createFont()
- * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#getFontAt(short)
- */
- public void setFont(Font font) {
- setFont((HSSFFont)font);
- }
- public void setFont(HSSFFont font) {
- _format.setIndentNotParentFont(true);
- short fontindex = font.getIndex();
- _format.setFontIndex(fontindex);
- }
-
- /**
- * gets the index of the font for this style
- * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#getFontAt(short)
- */
- public short getFontIndex()
- {
- return _format.getFontIndex();
- }
-
- /**
- * gets the font for this style
- * @param parentWorkbook The HSSFWorkbook that this style belongs to
- * @see org.apache.poi.hssf.usermodel.HSSFCellStyle#getFontIndex()
- * @see org.apache.poi.hssf.usermodel.HSSFWorkbook#getFontAt(short)
- */
- public HSSFFont getFont(org.apache.poi.ss.usermodel.Workbook parentWorkbook) {
- return ((HSSFWorkbook) parentWorkbook).getFontAt(getFontIndex());
- }
-
- /**
- * set the cell's using this style to be hidden
- * @param hidden - whether the cell using this style should be hidden
- */
- public void setHidden(boolean hidden)
- {
- _format.setIndentNotParentCellOptions(true);
- _format.setHidden(hidden);
- }
-
- /**
- * get whether the cell's using this style are to be hidden
- * @return hidden - whether the cell using this style should be hidden
- */
- public boolean getHidden()
- {
- return _format.isHidden();
- }
-
- /**
- * set the cell's using this style to be locked
- * @param locked - whether the cell using this style should be locked
- */
- public void setLocked(boolean locked)
- {
- _format.setIndentNotParentCellOptions(true);
- _format.setLocked(locked);
- }
-
- /**
- * get whether the cell's using this style are to be locked
- * @return hidden - whether the cell using this style should be locked
- */
- public boolean getLocked()
- {
- return _format.isLocked();
- }
-
- /**
- * set the type of horizontal alignment for the cell
- * @param align - the type of alignment
- * @see #ALIGN_GENERAL
- * @see #ALIGN_LEFT
- * @see #ALIGN_CENTER
- * @see #ALIGN_RIGHT
- * @see #ALIGN_FILL
- * @see #ALIGN_JUSTIFY
- * @see #ALIGN_CENTER_SELECTION
- */
- public void setAlignment(short align)
- {
- _format.setIndentNotParentAlignment(true);
- _format.setAlignment(align);
- }
-
- /**
- * get the type of horizontal alignment for the cell
- * @return align - the type of alignment
- * @see #ALIGN_GENERAL
- * @see #ALIGN_LEFT
- * @see #ALIGN_CENTER
- * @see #ALIGN_RIGHT
- * @see #ALIGN_FILL
- * @see #ALIGN_JUSTIFY
- * @see #ALIGN_CENTER_SELECTION
- */
- public short getAlignment()
- {
- return _format.getAlignment();
- }
-
- /**
- * set whether the text should be wrapped
- * @param wrapped wrap text or not
- */
- public void setWrapText(boolean wrapped)
- {
- _format.setIndentNotParentAlignment(true);
- _format.setWrapText(wrapped);
- }
-
- /**
- * get whether the text should be wrapped
- * @return wrap text or not
- */
- public boolean getWrapText()
- {
- return _format.getWrapText();
- }
-
- /**
- * set the type of vertical alignment for the cell
- * @param align the type of alignment
- * @see #VERTICAL_TOP
- * @see #VERTICAL_CENTER
- * @see #VERTICAL_BOTTOM
- * @see #VERTICAL_JUSTIFY
- */
- public void setVerticalAlignment(short align)
- {
- _format.setVerticalAlignment(align);
- }
-
- /**
- * get the type of vertical alignment for the cell
- * @return align the type of alignment
- * @see #VERTICAL_TOP
- * @see #VERTICAL_CENTER
- * @see #VERTICAL_BOTTOM
- * @see #VERTICAL_JUSTIFY
- */
- public short getVerticalAlignment()
- {
- return _format.getVerticalAlignment();
- }
-
- /**
- * set the degree of rotation for the text in the cell
- * @param rotation degrees (between -90 and 90 degrees, of 0xff for vertical)
- */
- public void setRotation(short rotation)
- {
- if (rotation == 0xff) {
- // Special cases for vertically aligned text
- }
- else if ((rotation < 0)&&(rotation >= -90)) {
- //Take care of the funny 4th quadrant issue
- //The 4th quadrant (-1 to -90) is stored as (91 to 180)
- rotation = (short)(90 - rotation);
- }
- else if ((rotation < -90) ||(rotation > 90)) {
- //Do not allow an incorrect rotation to be set
- throw new IllegalArgumentException("The rotation must be between -90 and 90 degrees, or 0xff");
- }
- _format.setRotation(rotation);
- }
-
- /**
- * get the degree of rotation for the text in the cell
- * @return rotation degrees (between -90 and 90 degrees, or 0xff for vertical)
- */
- public short getRotation()
- {
- short rotation = _format.getRotation();
- if (rotation == 0xff) {
- // Vertical aligned special case
- return rotation;
- }
- if (rotation > 90) {
- //This is actually the 4th quadrant
- rotation = (short)(90-rotation);
- }
- return rotation;
- }
-
- /**
- * set the number of spaces to indent the text in the cell
- * @param indent - number of spaces
- */
- public void setIndention(short indent)
- {
- _format.setIndent(indent);
- }
-
- /**
- * get the number of spaces to indent the text in the cell
- * @return indent - number of spaces
- */
- public short getIndention()
- {
- return _format.getIndent();
- }
-
- /**
- * set the type of border to use for the left border of the cell
- * @param border type
- * @see #BORDER_NONE
- * @see #BORDER_THIN
- * @see #BORDER_MEDIUM
- * @see #BORDER_DASHED
- * @see #BORDER_DOTTED
- * @see #BORDER_THICK
- * @see #BORDER_DOUBLE
- * @see #BORDER_HAIR
- * @see #BORDER_MEDIUM_DASHED
- * @see #BORDER_DASH_DOT
- * @see #BORDER_MEDIUM_DASH_DOT
- * @see #BORDER_DASH_DOT_DOT
- * @see #BORDER_MEDIUM_DASH_DOT_DOT
- * @see #BORDER_SLANTED_DASH_DOT
- */
- public void setBorderLeft(short border)
- {
- _format.setIndentNotParentBorder(true);
- _format.setBorderLeft(border);
- }
-
- /**
- * get the type of border to use for the left border of the cell
- * @return border type
- * @see #BORDER_NONE
- * @see #BORDER_THIN
- * @see #BORDER_MEDIUM
- * @see #BORDER_DASHED
- * @see #BORDER_DOTTED
- * @see #BORDER_THICK
- * @see #BORDER_DOUBLE
- * @see #BORDER_HAIR
- * @see #BORDER_MEDIUM_DASHED
- * @see #BORDER_DASH_DOT
- * @see #BORDER_MEDIUM_DASH_DOT
- * @see #BORDER_DASH_DOT_DOT
- * @see #BORDER_MEDIUM_DASH_DOT_DOT
- * @see #BORDER_SLANTED_DASH_DOT
- */
- public short getBorderLeft()
- {
- return _format.getBorderLeft();
- }
-
- /**
- * set the type of border to use for the right border of the cell
- * @param border type
- * @see #BORDER_NONE
- * @see #BORDER_THIN
- * @see #BORDER_MEDIUM
- * @see #BORDER_DASHED
- * @see #BORDER_DOTTED
- * @see #BORDER_THICK
- * @see #BORDER_DOUBLE
- * @see #BORDER_HAIR
- * @see #BORDER_MEDIUM_DASHED
- * @see #BORDER_DASH_DOT
- * @see #BORDER_MEDIUM_DASH_DOT
- * @see #BORDER_DASH_DOT_DOT
- * @see #BORDER_MEDIUM_DASH_DOT_DOT
- * @see #BORDER_SLANTED_DASH_DOT
- */
- public void setBorderRight(short border)
- {
- _format.setIndentNotParentBorder(true);
- _format.setBorderRight(border);
- }
-
- /**
- * get the type of border to use for the right border of the cell
- * @return border type
- * @see #BORDER_NONE
- * @see #BORDER_THIN
- * @see #BORDER_MEDIUM
- * @see #BORDER_DASHED
- * @see #BORDER_DOTTED
- * @see #BORDER_THICK
- * @see #BORDER_DOUBLE
- * @see #BORDER_HAIR
- * @see #BORDER_MEDIUM_DASHED
- * @see #BORDER_DASH_DOT
- * @see #BORDER_MEDIUM_DASH_DOT
- * @see #BORDER_DASH_DOT_DOT
- * @see #BORDER_MEDIUM_DASH_DOT_DOT
- * @see #BORDER_SLANTED_DASH_DOT
- */
- public short getBorderRight()
- {
- return _format.getBorderRight();
- }
-
- /**
- * set the type of border to use for the top border of the cell
- * @param border type
- * @see #BORDER_NONE
- * @see #BORDER_THIN
- * @see #BORDER_MEDIUM
- * @see #BORDER_DASHED
- * @see #BORDER_DOTTED
- * @see #BORDER_THICK
- * @see #BORDER_DOUBLE
- * @see #BORDER_HAIR
- * @see #BORDER_MEDIUM_DASHED
- * @see #BORDER_DASH_DOT
- * @see #BORDER_MEDIUM_DASH_DOT
- * @see #BORDER_DASH_DOT_DOT
- * @see #BORDER_MEDIUM_DASH_DOT_DOT
- * @see #BORDER_SLANTED_DASH_DOT
- */
- public void setBorderTop(short border)
- {
- _format.setIndentNotParentBorder(true);
- _format.setBorderTop(border);
- }
-
- /**
- * get the type of border to use for the top border of the cell
- * @return border type
- * @see #BORDER_NONE
- * @see #BORDER_THIN
- * @see #BORDER_MEDIUM
- * @see #BORDER_DASHED
- * @see #BORDER_DOTTED
- * @see #BORDER_THICK
- * @see #BORDER_DOUBLE
- * @see #BORDER_HAIR
- * @see #BORDER_MEDIUM_DASHED
- * @see #BORDER_DASH_DOT
- * @see #BORDER_MEDIUM_DASH_DOT
- * @see #BORDER_DASH_DOT_DOT
- * @see #BORDER_MEDIUM_DASH_DOT_DOT
- * @see #BORDER_SLANTED_DASH_DOT
- */
- public short getBorderTop()
- {
- return _format.getBorderTop();
- }
-
- /**
- * set the type of border to use for the bottom border of the cell
- * @param border type
- * @see #BORDER_NONE
- * @see #BORDER_THIN
- * @see #BORDER_MEDIUM
- * @see #BORDER_DASHED
- * @see #BORDER_DOTTED
- * @see #BORDER_THICK
- * @see #BORDER_DOUBLE
- * @see #BORDER_HAIR
- * @see #BORDER_MEDIUM_DASHED
- * @see #BORDER_DASH_DOT
- * @see #BORDER_MEDIUM_DASH_DOT
- * @see #BORDER_DASH_DOT_DOT
- * @see #BORDER_MEDIUM_DASH_DOT_DOT
- * @see #BORDER_SLANTED_DASH_DOT
- */
- public void setBorderBottom(short border)
- {
- _format.setIndentNotParentBorder(true);
- _format.setBorderBottom(border);
- }
-
- /**
- * get the type of border to use for the bottom border of the cell
- * @return border type
- * @see #BORDER_NONE
- * @see #BORDER_THIN
- * @see #BORDER_MEDIUM
- * @see #BORDER_DASHED
- * @see #BORDER_DOTTED
- * @see #BORDER_THICK
- * @see #BORDER_DOUBLE
- * @see #BORDER_HAIR
- * @see #BORDER_MEDIUM_DASHED
- * @see #BORDER_DASH_DOT
- * @see #BORDER_MEDIUM_DASH_DOT
- * @see #BORDER_DASH_DOT_DOT
- * @see #BORDER_MEDIUM_DASH_DOT_DOT
- * @see #BORDER_SLANTED_DASH_DOT
- */
- public short getBorderBottom()
- {
- return _format.getBorderBottom();
- }
-
- /**
- * set the color to use for the left border
- * @param color The index of the color definition
- */
- public void setLeftBorderColor(short color)
- {
- _format.setLeftBorderPaletteIdx(color);
- }
-
- /**
- * get the color to use for the left border
- * @see org.apache.poi.hssf.usermodel.HSSFPalette#getColor(short)
- * @return The index of the color definition
- */
- public short getLeftBorderColor()
- {
- return _format.getLeftBorderPaletteIdx();
- }
-
- /**
- * set the color to use for the right border
- * @param color The index of the color definition
- */
- public void setRightBorderColor(short color)
- {
- _format.setRightBorderPaletteIdx(color);
- }
-
- /**
- * get the color to use for the left border
- * @see org.apache.poi.hssf.usermodel.HSSFPalette#getColor(short)
- * @return The index of the color definition
- */
- public short getRightBorderColor()
- {
- return _format.getRightBorderPaletteIdx();
- }
-
- /**
- * set the color to use for the top border
- * @param color The index of the color definition
- */
- public void setTopBorderColor(short color)
- {
- _format.setTopBorderPaletteIdx(color);
- }
-
- /**
- * get the color to use for the top border
- * @see org.apache.poi.hssf.usermodel.HSSFPalette#getColor(short)
- * @return The index of the color definition
- */
- public short getTopBorderColor()
- {
- return _format.getTopBorderPaletteIdx();
- }
-
- /**
- * set the color to use for the bottom border
- * @param color The index of the color definition
- */
- public void setBottomBorderColor(short color)
- {
- _format.setBottomBorderPaletteIdx(color);
- }
-
- /**
- * get the color to use for the left border
- * @see org.apache.poi.hssf.usermodel.HSSFPalette#getColor(short)
- * @return The index of the color definition
- */
- public short getBottomBorderColor()
- {
- return _format.getBottomBorderPaletteIdx();
- }
-
- /**
- * setting to one fills the cell with the foreground color... No idea about
- * other values
- *
- * @see #NO_FILL
- * @see #SOLID_FOREGROUND
- * @see #FINE_DOTS
- * @see #ALT_BARS
- * @see #SPARSE_DOTS
- * @see #THICK_HORZ_BANDS
- * @see #THICK_VERT_BANDS
- * @see #THICK_BACKWARD_DIAG
- * @see #THICK_FORWARD_DIAG
- * @see #BIG_SPOTS
- * @see #BRICKS
- * @see #THIN_HORZ_BANDS
- * @see #THIN_VERT_BANDS
- * @see #THIN_BACKWARD_DIAG
- * @see #THIN_FORWARD_DIAG
- * @see #SQUARES
- * @see #DIAMONDS
- *
- * @param fp fill pattern (set to 1 to fill w/foreground color)
- */
- public void setFillPattern(short fp)
- {
- _format.setAdtlFillPattern(fp);
- }
-
- /**
- * get the fill pattern (??) - set to 1 to fill with foreground color
- * @return fill pattern
- */
- public short getFillPattern()
- {
- return _format.getAdtlFillPattern();
- }
-
- /**
- * Checks if the background and foreground fills are set correctly when one
- * or the other is set to the default color.
- * <p>Works like the logic table below:</p>
- * <p>BACKGROUND FOREGROUND</p>
- * <p>NONE AUTOMATIC</p>
- * <p>0x41 0x40</p>
- * <p>NONE RED/ANYTHING</p>
- * <p>0x40 0xSOMETHING</p>
- */
- private void checkDefaultBackgroundFills() {
- if (_format.getFillForeground() == org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index) {
- //JMH: Why +1, hell why not. I guess it made some sense to someone at the time. Doesnt
- //to me now.... But experience has shown that when the fore is set to AUTOMATIC then the
- //background needs to be incremented......
- if (_format.getFillBackground() != (org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index+1))
- setFillBackgroundColor((short)(org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index+1));
- } else if (_format.getFillBackground() == org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index+1)
- //Now if the forground changes to a non-AUTOMATIC color the background resets itself!!!
- if (_format.getFillForeground() != org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index)
- setFillBackgroundColor(org.apache.poi.hssf.util.HSSFColor.AUTOMATIC.index);
- }
-
- /**
- * set the background fill color.
- * <p>
- * For example:
- * <pre>
- * cs.setFillPattern(HSSFCellStyle.FINE_DOTS );
- * cs.setFillBackgroundColor(new HSSFColor.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(HSSFCellStyle.FINE_DOTS );
- * cs.setFillForegroundColor(new HSSFColor.BLUE().getIndex());
- * cs.setFillBackgroundColor(new HSSFColor.RED().getIndex());
- * </pre>
- * or, for the special case of SOLID_FILL:
- * <pre>
- * cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND );
- * cs.setFillForegroundColor(new HSSFColor.RED().getIndex());
- * </pre>
- * It is necessary to set the fill style in order
- * for the color to be shown in the cell.
- *
- * @param bg color
- */
- public void setFillBackgroundColor(short bg)
- {
- _format.setFillBackground(bg);
- checkDefaultBackgroundFills();
- }
-
- /**
- * Get the background fill color.
- * Note - many cells are actually filled with a foreground
- * fill, not a background fill - see {@link #getFillForegroundColor()}
- * @see org.apache.poi.hssf.usermodel.HSSFPalette#getColor(short)
- * @return fill color
- */
- public short getFillBackgroundColor()
- {
- short result = _format.getFillBackground();
- //JMH: Do this ridiculous conversion, and let HSSFCellStyle
- //internally migrate back and forth
- if (result == (HSSFColor.AUTOMATIC.index+1)) {
- return HSSFColor.AUTOMATIC.index;
- }
- return result;
- }
-
- public HSSFColor getFillBackgroundColorColor() {
- HSSFPalette pallette = new HSSFPalette(
- _workbook.getCustomPalette()
- );
- return pallette.getColor(
- getFillBackgroundColor()
- );
- }
-
- /**
- * set the foreground fill color
- * <i>Note: Ensure Foreground color is set prior to background color.</i>
- * @param bg color
- */
- public void setFillForegroundColor(short bg)
- {
- _format.setFillForeground(bg);
- checkDefaultBackgroundFills();
- }
-
- /**
- * Get the foreground fill color.
- * Many cells are filled with this, instead of a
- * background color ({@link #getFillBackgroundColor()})
- * @see org.apache.poi.hssf.usermodel.HSSFPalette#getColor(short)
- * @return fill color
- */
- public short getFillForegroundColor()
- {
- return _format.getFillForeground();
- }
-
- public HSSFColor getFillForegroundColorColor() {
- HSSFPalette pallette = new HSSFPalette(
- _workbook.getCustomPalette()
- );
- return pallette.getColor(
- getFillForegroundColor()
- );
- }
-
- /**
- * Gets the name of the user defined style.
- * Returns null for built in styles, and
- * styles where no name has been defined
- */
- public String getUserStyleName() {
- StyleRecord sr = _workbook.getStyleRecord(_index);
- if(sr == null) {
- return null;
- }
- if(sr.isBuiltin()) {
- return null;
- }
- return sr.getName();
- }
-
- /**
- * Sets the name of the user defined style.
- * Will complain if you try this on a built in style.
- */
- public void setUserStyleName(String styleName) {
- StyleRecord sr = _workbook.getStyleRecord(_index);
- if(sr == null) {
- sr = _workbook.createStyleRecord(_index);
- }
- // All Style records start as "builtin", but generally
- // only 20 and below really need to be
- if(sr.isBuiltin() && _index <= 20) {
- throw new IllegalArgumentException("Unable to set user specified style names for built in styles!");
- }
- sr.setName(styleName);
- }
-
- /**
- * Controls if the Cell should be auto-sized
- * to shrink to fit if the text is too long
- */
- public void setShrinkToFit(boolean shrinkToFit) {
- _format.setShrinkToFit(shrinkToFit);
- }
- /**
- * Should the Cell be auto-sized by Excel to shrink
- * it to fit if this text is too long?
- */
- public boolean getShrinkToFit() {
- return _format.getShrinkToFit();
- }
-
- /**
- * Get the reading order, for RTL/LTR ordering of
- * the text.
- * <p>0 means Context (Default), 1 means Left To Right,
- * and 2 means Right to Left</p>
- *
- * @return order - the reading order (0,1,2)
- */
- public short getReadingOrder() {
- return _format.getReadingOrder();
- }
- /**
- * Sets the reading order, for RTL/LTR ordering of
- * the text.
- * <p>0 means Context (Default), 1 means Left To Right,
- * and 2 means Right to Left</p>
- *
- * @param order - the reading order (0,1,2)
- */
- public void setReadingOrder(short order) {
- _format.setReadingOrder(order);
- }
-
- /**
- * Verifies that this style belongs to the supplied Workbook.
- * 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 verifyBelongsToWorkbook(HSSFWorkbook wb) {
- if(wb.getWorkbook() != _workbook) {
- throw new IllegalArgumentException("This Style does not belong to the supplied Workbook. Are you trying to assign a style from one workbook to the cell of a differnt workbook?");
- }
- }
-
- /**
- * Clones all the style information from another
- * HSSFCellStyle, onto this one. This
- * HSSFCellStyle will then have all the same
- * properties as the source, but the two may
- * be edited independently.
- * Any stylings on this HSSFCellStyle will be lost!
- *
- * The source HSSFCellStyle could be from another
- * HSSFWorkbook if you like. This allows you to
- * copy styles from one HSSFWorkbook to another.
- */
- public void cloneStyleFrom(CellStyle source) {
- if(source instanceof HSSFCellStyle) {
- this.cloneStyleFrom((HSSFCellStyle)source);
- } else {
- throw new IllegalArgumentException("Can only clone from one HSSFCellStyle to another, not between HSSFCellStyle and XSSFCellStyle");
- }
- }
- public void cloneStyleFrom(HSSFCellStyle source) {
- // First we need to clone the extended format
- // record
- _format.cloneStyleFrom(source._format);
-
- // Handle matching things if we cross workbooks
- if(_workbook != source._workbook) {
-
- lastDateFormat.set(Short.MIN_VALUE);
- lastFormats.set(null);
- getDataFormatStringCache.set(null);
-
- // Then we need to clone the format string,
- // and update the format record for this
- short fmt = (short)_workbook.createFormat(source.getDataFormatString() );
- setDataFormat(fmt);
-
- // Finally we need to clone the font,
- // and update the format record for this
- FontRecord fr = _workbook.createNewFont();
- fr.cloneStyleFrom(
- source._workbook.getFontRecordAt(
- source.getFontIndex()
- )
- );
-
- HSSFFont font = new HSSFFont(
- (short)_workbook.getFontIndex(fr), fr
- );
- setFont(font);
- }
- }
-
-
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((_format == null) ? 0 : _format.hashCode());
- result = prime * result + _index;
- return result;
- }
-
- public boolean equals(Object obj) {
- if (this == obj) return true;
- if (obj == null) return false;
- if (obj instanceof HSSFCellStyle) {
- final HSSFCellStyle other = (HSSFCellStyle) obj;
- if (_format == null) {
- if (other._format != null)
- return false;
- } else if (!_format.equals(other._format))
- return false;
- if (_index != other._index)
- return false;
- return true;
- }
- return false;
- }
-
- }
|