Class AbstractExcelImporter

  • All Implemented Interfaces:
    SImporter, java.io.Serializable
    Direct Known Subclasses:
    ExcelXlsImporter

    public abstract class AbstractExcelImporter
    extends AbstractImporter
    implements java.io.Serializable
    Contains common importing behavior for XLS. Spreadsheet SBook model including following information: Book: name Sheet: name, (default) column width, (default) row height, hidden row (column), row (column) style, freeze, merge, protection, named range , gridline display Cell: type, value, font with color and style, type offset(normal or subscript), background color, border's type and color , data format, alignment, wrap, locked, fill pattern We use XLS common interface (e.g. CellStyle instead of XSSFCellStyle) to get content first for that codes can be easily moved to parent class.

    Note: Xlsx support in XlsxImporter since Keikai 5.0

    Since:
    3.5.0
    Author:
    Hawk
    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected boolean _importCache  
      protected SBook book
      target book model
      protected java.util.Map<org.apache.poi.ss.usermodel.PictureData,​java.lang.Integer> importedPictureData  
      protected StyleCache styleCache
      Keep track of imported style during importing to avoid creating duplicated style objects.
      protected org.apache.poi.ss.usermodel.Workbook workbook
      source POI book
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      protected abstract org.apache.poi.ss.usermodel.Workbook createPoiBook​(java.io.InputStream is)  
      protected SFont createZssFont​(org.apache.poi.ss.usermodel.Font poiFont)  
      protected abstract int getAnchorHeightInPx​(org.apache.poi.ss.usermodel.ClientAnchor anchor, org.apache.poi.ss.usermodel.Sheet poiSheet)  
      protected abstract int getAnchorWidthInPx​(org.apache.poi.ss.usermodel.ClientAnchor anchor, org.apache.poi.ss.usermodel.Sheet poiSheet)
      If in same column: anchorWidthInFirstColumn + anchor width in inter-columns + anchorWidthInLastColumn (dx2) no in same column: anchorWidthInLastColumn - offsetInFirstColumn (dx1)
      static java.lang.String getBookType​(SBook book)
      Gets the book-type information ("xls" or "xlsx"), return null if not found
      protected org.apache.poi.ss.usermodel.Font getPoiFontFromRichText​(org.apache.poi.ss.usermodel.Workbook book, org.apache.poi.ss.usermodel.Cell cell, org.apache.poi.ss.usermodel.RichTextString rstr, int run)  
      protected abstract int getXoffsetInPixel​(org.apache.poi.ss.usermodel.ClientAnchor clientAnchor, org.apache.poi.ss.usermodel.Sheet poiSheet)  
      protected abstract int getYoffsetInPixel​(org.apache.poi.ss.usermodel.ClientAnchor clientAnchor, org.apache.poi.ss.usermodel.Sheet poiSheet)  
      protected void importAutoFilter​(org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)
      POI AutoFilter.getFilterColumn(i) sometimes returns null.
      protected void importAutoFilterColumns​(org.apache.poi.ss.usermodel.AutoFilter poiFilter, SAutoFilter zssFilter, int numberOfColumn)  
      protected SCell importCell​(org.apache.poi.ss.usermodel.Cell poiCell, int row, SSheet sheet)  
      protected SCellStyle importCellStyle​(org.apache.poi.ss.usermodel.CellStyle poiCellStyle)
      Convert CellStyle into NCellStyle
      protected SCellStyle importCellStyle​(org.apache.poi.ss.usermodel.CellStyle poiCellStyle, boolean inStyleTable)  
      protected abstract void importColumn​(org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)
      When a column is hidden with default width, we don't import the width for it's 0.
      protected abstract void importConditionalFormatting​(SSheet sheet, org.apache.poi.ss.usermodel.Sheet poiSheet)  
      protected void importDefaultCellStyles()  
      protected abstract void importDrawings​(org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)
      Drawings includes charts and pictures.
      protected abstract void importExternalBookLinks()
      Excel uses external book links to map external book index and name.
      protected void importExtraStyles()  
      protected SFont importFont​(org.apache.poi.ss.usermodel.CellStyle poiCellStyle)  
      protected void importMergedRegions​(org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)  
      protected void importNamedRange()
      Name should be created after sheets created.
      protected void importNamedStyles()  
      protected abstract void importPassword​(org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)  
      protected void importPicture​(java.util.List<org.apache.poi.ss.usermodel.Picture> poiPictures, org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)  
      protected void importRichText​(org.apache.poi.ss.usermodel.Cell poiCell, org.apache.poi.ss.usermodel.RichTextString poiRichTextString0, SRichText richText)  
      protected SRow importRow​(org.apache.poi.ss.usermodel.Row poiRow, SSheet sheet)  
      SBook imports​(java.io.InputStream is, java.lang.String bookName)
      Import the model according to reversed dependency order among model objects: book, sheet, defined name, cells, chart, pictures, validation.
      protected SSheet importSheet​(org.apache.poi.ss.usermodel.Sheet poiSheet, int poiSheetIndex)  
      protected void importSheetDefaultColumnWidth​(org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)  
      protected abstract void importSheetProtection​(org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)
      POI SheetProtection.
      protected abstract void importTables​(org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)
      POI sheet tables
      protected void importTableStyles()  
      protected abstract void importValidation​(org.apache.poi.ss.usermodel.Sheet poiSheet, SSheet sheet)  
      protected boolean isImportCache()
      Returns if import file cached value.
      protected boolean mustCalc​(SCell cell)  
      protected abstract void setBookType​(SBook book)  
      void setImportCache​(boolean b)
      Set if import Excel cached value.
      protected boolean skipName​(org.apache.poi.ss.usermodel.Name definedName)  
      protected ViewAnchor toViewAnchor​(org.apache.poi.ss.usermodel.Sheet poiSheet, org.apache.poi.ss.usermodel.ClientAnchor clientAnchor)  
      protected SFont toZssFont​(org.apache.poi.ss.usermodel.Font poiFont)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • styleCache

        protected StyleCache styleCache
        Keep track of imported style during importing to avoid creating duplicated style objects.
      • book

        protected SBook book
        target book model
      • workbook

        protected org.apache.poi.ss.usermodel.Workbook workbook
        source POI book
      • importedPictureData

        protected java.util.Map<org.apache.poi.ss.usermodel.PictureData,​java.lang.Integer> importedPictureData
      • _importCache

        protected boolean _importCache
    • Constructor Detail

      • AbstractExcelImporter

        public AbstractExcelImporter()
    • Method Detail

      • importDefaultCellStyles

        protected void importDefaultCellStyles()
      • importNamedStyles

        protected void importNamedStyles()
      • imports

        public SBook imports​(java.io.InputStream is,
                             java.lang.String bookName)
                      throws java.io.IOException
        Import the model according to reversed dependency order among model objects: book, sheet, defined name, cells, chart, pictures, validation.
        Specified by:
        imports in interface SImporter
        Parameters:
        is - the input stream
        bookName - the book name for imported book
        Returns:
        the book instance
        Throws:
        java.io.IOException
      • createPoiBook

        protected abstract org.apache.poi.ss.usermodel.Workbook createPoiBook​(java.io.InputStream is)
                                                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • setBookType

        protected abstract void setBookType​(SBook book)
      • getBookType

        public static java.lang.String getBookType​(SBook book)
        Gets the book-type information ("xls" or "xlsx"), return null if not found
        Parameters:
        book -
        Returns:
      • importColumn

        protected abstract void importColumn​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                             SSheet sheet)
        When a column is hidden with default width, we don't import the width for it's 0. We also don't import the width that equals to default width for optimization.
        Parameters:
        poiSheet -
        sheet -
      • getAnchorWidthInPx

        protected abstract int getAnchorWidthInPx​(org.apache.poi.ss.usermodel.ClientAnchor anchor,
                                                  org.apache.poi.ss.usermodel.Sheet poiSheet)
        If in same column: anchorWidthInFirstColumn + anchor width in inter-columns + anchorWidthInLastColumn (dx2) no in same column: anchorWidthInLastColumn - offsetInFirstColumn (dx1)
      • getAnchorHeightInPx

        protected abstract int getAnchorHeightInPx​(org.apache.poi.ss.usermodel.ClientAnchor anchor,
                                                   org.apache.poi.ss.usermodel.Sheet poiSheet)
      • importNamedRange

        protected void importNamedRange()
        Name should be created after sheets created. A special defined name, _xlnm._FilterDatabase (xlsx) or _FilterDatabase (xls), stores the selected cells for auto-filter
      • skipName

        protected boolean skipName​(org.apache.poi.ss.usermodel.Name definedName)
      • importExternalBookLinks

        protected abstract void importExternalBookLinks()
        Excel uses external book links to map external book index and name. The formula contains full external book name or index only (e.g [book2.xlsx] or [1]). We needs such table for parsing and evaluating formula when necessary.
      • importSheetDefaultColumnWidth

        protected void importSheetDefaultColumnWidth​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                                     SSheet sheet)
      • importSheet

        protected SSheet importSheet​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                     int poiSheetIndex)
      • importPassword

        protected abstract void importPassword​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                               SSheet sheet)
      • importMergedRegions

        protected void importMergedRegions​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                           SSheet sheet)
      • importDrawings

        protected abstract void importDrawings​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                               SSheet sheet)
        Drawings includes charts and pictures.
      • importValidation

        protected abstract void importValidation​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                                 SSheet sheet)
      • importRow

        protected SRow importRow​(org.apache.poi.ss.usermodel.Row poiRow,
                                 SSheet sheet)
      • importCell

        protected SCell importCell​(org.apache.poi.ss.usermodel.Cell poiCell,
                                   int row,
                                   SSheet sheet)
      • importRichText

        protected void importRichText​(org.apache.poi.ss.usermodel.Cell poiCell,
                                      org.apache.poi.ss.usermodel.RichTextString poiRichTextString0,
                                      SRichText richText)
      • importCellStyle

        protected SCellStyle importCellStyle​(org.apache.poi.ss.usermodel.CellStyle poiCellStyle)
        Convert CellStyle into NCellStyle
        Parameters:
        poiCellStyle -
      • importCellStyle

        protected SCellStyle importCellStyle​(org.apache.poi.ss.usermodel.CellStyle poiCellStyle,
                                             boolean inStyleTable)
      • importFont

        protected SFont importFont​(org.apache.poi.ss.usermodel.CellStyle poiCellStyle)
      • toZssFont

        protected SFont toZssFont​(org.apache.poi.ss.usermodel.Font poiFont)
      • createZssFont

        protected SFont createZssFont​(org.apache.poi.ss.usermodel.Font poiFont)
      • toViewAnchor

        protected ViewAnchor toViewAnchor​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                          org.apache.poi.ss.usermodel.ClientAnchor clientAnchor)
      • getXoffsetInPixel

        protected abstract int getXoffsetInPixel​(org.apache.poi.ss.usermodel.ClientAnchor clientAnchor,
                                                 org.apache.poi.ss.usermodel.Sheet poiSheet)
      • getYoffsetInPixel

        protected abstract int getYoffsetInPixel​(org.apache.poi.ss.usermodel.ClientAnchor clientAnchor,
                                                 org.apache.poi.ss.usermodel.Sheet poiSheet)
      • importPicture

        protected void importPicture​(java.util.List<org.apache.poi.ss.usermodel.Picture> poiPictures,
                                     org.apache.poi.ss.usermodel.Sheet poiSheet,
                                     SSheet sheet)
      • importAutoFilter

        protected void importAutoFilter​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                        SSheet sheet)
        POI AutoFilter.getFilterColumn(i) sometimes returns null. A POI FilterColumn object only exists when we have set a criteria on that column. For example, if we enable auto filter on 2 columns, but we only set criteria on 2nd column. Thus, the size of filter column is 1. There is only one FilterColumn object and its column id is 1. Only getFilterColumn(1) will return a FilterColumn, other get null.
        Parameters:
        poiSheet - source POI sheet
        sheet - destination sheet
      • importAutoFilterColumns

        protected void importAutoFilterColumns​(org.apache.poi.ss.usermodel.AutoFilter poiFilter,
                                               SAutoFilter zssFilter,
                                               int numberOfColumn)
      • getPoiFontFromRichText

        protected org.apache.poi.ss.usermodel.Font getPoiFontFromRichText​(org.apache.poi.ss.usermodel.Workbook book,
                                                                          org.apache.poi.ss.usermodel.Cell cell,
                                                                          org.apache.poi.ss.usermodel.RichTextString rstr,
                                                                          int run)
      • importSheetProtection

        protected abstract void importSheetProtection​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                                      SSheet sheet)
        POI SheetProtection.
        Parameters:
        poiSheet - source POI sheet
        sheet - destination sheet
      • importTables

        protected abstract void importTables​(org.apache.poi.ss.usermodel.Sheet poiSheet,
                                             SSheet sheet)
        POI sheet tables
        Parameters:
        poiSheet - source POI sheet
        sheet - destination sheet
        Since:
        3.8.0
      • setImportCache

        public void setImportCache​(boolean b)
        Set if import Excel cached value.
        Overrides:
        setImportCache in class AbstractImporter
        Since:
        3.7.0
      • isImportCache

        protected boolean isImportCache()
        Returns if import file cached value.
        Overrides:
        isImportCache in class AbstractImporter
        Since:
        3.7.0
      • mustCalc

        protected boolean mustCalc​(SCell cell)
      • importConditionalFormatting

        protected abstract void importConditionalFormatting​(SSheet sheet,
                                                            org.apache.poi.ss.usermodel.Sheet poiSheet)
      • importExtraStyles

        protected void importExtraStyles()
      • importTableStyles

        protected void importTableStyles()