Class StylesTable

java.lang.Object
org.apache.poi.ooxml.POIXMLDocumentPart
org.apache.poi.xssf.model.StylesTable
All Implemented Interfaces:
Styles

public class StylesTable extends POIXMLDocumentPart implements Styles
Table of styles shared across all sheets in a workbook.
  • Field Details

    • FIRST_CUSTOM_STYLE_ID

      public static final int FIRST_CUSTOM_STYLE_ID
      The first style id available for use as a custom style
      See Also:
  • Constructor Details

    • StylesTable

      public StylesTable()
      Create a new, empty StylesTable
    • StylesTable

      public StylesTable(PackagePart part) throws IOException
      Throws:
      IOException
      Since:
      POI 3.14-Beta1
  • Method Details

    • setMaxNumberOfDataFormats

      public void setMaxNumberOfDataFormats(int num)
      Changes the maximum number of data formats that may be in a style table
      Parameters:
      num - the upper limit on number of data formats in the styles table when adding new data formats
      Throws:
      IllegalArgumentException - if num invalid input: '<' 0
      IllegalStateException - if num invalid input: '<' current number of data formats in the style table. Data formats must be explicitly removed before the limit can be decreased.
    • getMaxNumberOfDataFormats

      public int getMaxNumberOfDataFormats()
      Get the upper limit on the number of data formats that has been set for the style table. To get the current number of data formats in use, use getNumDataFormats().
      Returns:
      the maximum number of data formats allowed in the workbook
    • setWorkbook

      public void setWorkbook(XSSFWorkbook wb)
    • getTheme

      public ThemesTable getTheme()
      Get the current Workbook's theme table, or null if the Workbook lacks any themes.

      Use ensureThemesTable() to have a themes table created if needed

    • setTheme

      public void setTheme(ThemesTable theme)
    • ensureThemesTable

      public void ensureThemesTable()
      If there isn't currently a ThemesTable for the current Workbook, then creates one and sets it up. After this, calls to getTheme() won't give null
    • readFrom

      public void readFrom(InputStream is) throws IOException
      Read this shared styles table from an XML file.
      Parameters:
      is - The input stream containing the XML document.
      Throws:
      IOException - if an error occurs while reading.
    • getNumberFormatAt

      public String getNumberFormatAt(short fmtId)
      Get number format string given its id
      Specified by:
      getNumberFormatAt in interface Styles
      Parameters:
      fmtId - number format id
      Returns:
      number format code
    • putNumberFormat

      public int putNumberFormat(String fmt)
      Puts fmt in the numberFormats map if the format is not already in the the number format style table. Does nothing if fmt is already in number format style table.
      Specified by:
      putNumberFormat in interface Styles
      Parameters:
      fmt - the number format to add to number format style table
      Returns:
      the index of fmt in the number format style table
      Throws:
      IllegalStateException - if adding the number format to the styles table would exceed the MAXIMUM_NUMBER_OF_DATA_FORMATS allowed.
    • putNumberFormat

      public void putNumberFormat(short index, String fmt)
      Add a number format with a specific ID into the numberFormats map. If a format with the same ID already exists, overwrite the format code with fmt This may be used to override built-in number formats.
      Specified by:
      putNumberFormat in interface Styles
      Parameters:
      index - the number format ID
      fmt - the number format code
    • removeNumberFormat

      public boolean removeNumberFormat(short index)
      Remove a number format from the style table if it exists. All cell styles with this number format will be modified to use the default number format.
      Specified by:
      removeNumberFormat in interface Styles
      Parameters:
      index - the number format id to remove
      Returns:
      true if the number format was removed
    • removeNumberFormat

      public boolean removeNumberFormat(String fmt)
      Remove a number format from the style table if it exists All cell styles with this number format will be modified to use the default number format
      Specified by:
      removeNumberFormat in interface Styles
      Parameters:
      fmt - the number format to remove
      Returns:
      true if the number format was removed
    • getFontAt

      public XSSFFont getFontAt(int idx)
      Specified by:
      getFontAt in interface Styles
    • putFont

      public int putFont(XSSFFont font, boolean forceRegistration)
      Records the given font in the font table. Will re-use an existing font index if this font matches another, EXCEPT if forced registration is requested. This allows people to create several fonts then customise them later. Note - End Users probably want to call XSSFFont.registerTo(StylesTable)
      Specified by:
      putFont in interface Styles
    • putFont

      public int putFont(XSSFFont font)
      Description copied from interface: Styles
      Records the given font in the font table. Will re-use an existing font index if this font matches another.
      Specified by:
      putFont in interface Styles
    • getStyleAt

      public XSSFCellStyle getStyleAt(int idx)
      Specified by:
      getStyleAt in interface Styles
      Parameters:
      idx - style index
      Returns:
      XSSFCellStyle or null if idx is out of bounds for xfs array
    • putStyle

      public int putStyle(XSSFCellStyle style)
      Specified by:
      putStyle in interface Styles
    • getBorderAt

      public XSSFCellBorder getBorderAt(int idx)
      Specified by:
      getBorderAt in interface Styles
    • putBorder

      public int putBorder(XSSFCellBorder border)
      Adds a border to the border style table if it isn't already in the style table Does nothing if border is already in borders style table
      Specified by:
      putBorder in interface Styles
      Parameters:
      border - border to add
      Returns:
      the index of the added border
    • getFillAt

      public XSSFCellFill getFillAt(int idx)
      Specified by:
      getFillAt in interface Styles
    • getBorders

      public List<XSSFCellBorder> getBorders()
    • getFills

      public List<XSSFCellFill> getFills()
    • getFonts

      public List<XSSFFont> getFonts()
    • getNumberFormats

      public Map<Short,String> getNumberFormats()
    • putFill

      public int putFill(XSSFCellFill fill)
      Adds a fill to the fill style table if it isn't already in the style table Does nothing if fill is already in fill style table
      Specified by:
      putFill in interface Styles
      Parameters:
      fill - fill to add
      Returns:
      the index of the added fill
    • getCellXfAt

      @Internal public org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf getCellXfAt(int idx)
    • putCellXf

      @Internal public int putCellXf(org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf cellXf)
      Adds a cell to the styles table. Does not check for duplicates.
      Parameters:
      cellXf - the cell to add to the styles table
      Returns:
      the added cell ID in the style table
    • replaceCellXfAt

      @Internal public void replaceCellXfAt(int idx, org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf cellXf)
    • getCellStyleXfAt

      @Internal public org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf getCellStyleXfAt(int idx)
    • putCellStyleXf

      @Internal public int putCellStyleXf(org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf cellStyleXf)
      Adds a cell style to the styles table. Does not check for duplicates.
      Parameters:
      cellStyleXf - the cell style to add to the styles table
      Returns:
      the cell style ID in the style table
    • replaceCellStyleXfAt

      @Internal protected void replaceCellStyleXfAt(int idx, org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf cellStyleXf)
    • getNumCellStyles

      public int getNumCellStyles()
      get the size of cell styles
      Specified by:
      getNumCellStyles in interface Styles
    • getNumDataFormats

      public int getNumDataFormats()
      Specified by:
      getNumDataFormats in interface Styles
      Returns:
      number of data formats in the styles table
    • _getStyleXfsSize

      @Internal public int _getStyleXfsSize()
      For unit testing only
    • getCTStylesheet

      @Internal public org.openxmlformats.schemas.spreadsheetml.x2006.main.CTStylesheet getCTStylesheet()
      For unit testing only!
    • _getDXfsSize

      @Internal public int _getDXfsSize()
    • writeTo

      public void writeTo(OutputStream out) throws IOException
      Write this table out as XML.
      Parameters:
      out - The stream to write to.
      Throws:
      IOException - if an error occurs while writing.
    • commit

      protected void commit() throws IOException
      Description copied from class: POIXMLDocumentPart
      Save the content in the underlying package part. Default implementation is empty meaning that the package part is left unmodified.

      Sub-classes should override and add logic to marshal the "model" into Ooxml4J.

      For example, the code saving a generic XML entry may look as follows:

       protected void commit() throws IOException {
         PackagePart part = getPackagePart();
         OutputStream out = part.getOutputStream();
         XmlObject bean = getXmlBean(); //the "model" which holds changes in memory
         bean.save(out, DEFAULT_XML_OPTIONS);
         out.close();
       }
       
      Overrides:
      commit in class POIXMLDocumentPart
      Throws:
      IOException - a subclass may throw an IOException if the changes can't be committed
    • getDxfAt

      @Internal public org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDxf getDxfAt(int idx)
    • putDxf

      @Internal public int putDxf(org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDxf dxf)
      Adds a Dxf to the style table Does not check for duplicates.
      Parameters:
      dxf - the Dxf to add
      Returns:
      added dxf ID in the style table
    • getExplicitTableStyle

      public TableStyle getExplicitTableStyle(String name)
      NOTE: this only returns explicitly defined styles
      Parameters:
      name - of the table style
      Returns:
      defined style, or null if not explicitly defined
      Since:
      3.17 beta 1
    • getExplicitTableStyleNames

      public Set<String> getExplicitTableStyleNames()
      Returns:
      names of all explicitly defined table styles in the workbook
      Since:
      3.17 beta 1
    • getTableStyle

      public TableStyle getTableStyle(String name)
      Parameters:
      name - of the table style
      Returns:
      defined style, either explicit or built-in, or null if not found
      Since:
      3.17 beta 1
    • createCellStyle

      public XSSFCellStyle createCellStyle()
      Create a cell style in this style table. Note - End users probably want to call XSSFWorkbook.createCellStyle() rather than working with the styles table directly.
      Throws:
      IllegalStateException - if the maximum number of cell styles has been reached.
    • findFont

      public XSSFFont findFont(boolean bold, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline)
      Finds a font that matches the one with the supplied attributes, where color is the indexed-value, not the actual color.
    • findFont

      public XSSFFont findFont(boolean bold, Color color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline)
      Finds a font that matches the one with the supplied attributes, where color is the actual Color-value, not the indexed color
    • getIndexedColors

      public IndexedColorMap getIndexedColors()
      Returns:
      default or custom indexed color to RGB mapping