You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2020/12/10 18:18:51 UTC

svn commit: r1884288 - in /poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming: SXSSFRow.java SXSSFSheet.java

Author: fanningpj
Date: Thu Dec 10 18:18:51 2020
New Revision: 1884288

URL: http://svn.apache.org/viewvc?rev=1884288&view=rev
Log:
[github-206] Improve perfomance of SXSSF cell evaluation. Thanks to This closes #206

Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java?rev=1884288&r1=1884287&r2=1884288&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java Thu Dec 10 18:18:51 2020
@@ -49,6 +49,7 @@ public class SXSSFRow implements Row, Co
     // use Boolean to have a tri-state for on/off/undefined
     private Boolean _hidden = UNDEFINED;
     private Boolean _collapsed = UNDEFINED;
+    private int _rowNum;
 
     public SXSSFRow(SXSSFSheet sheet)
     {
@@ -59,6 +60,7 @@ public class SXSSFRow implements Row, Co
     {
         return new CellIterator();
     }
+
     public boolean hasCustomHeight()
     {
         return _height!=-1;
@@ -195,7 +197,8 @@ public class SXSSFRow implements Row, Co
     @Override
     public void setRowNum(int rowNum)
     {
-        _sheet.changeRowNum(this,rowNum);
+        this._rowNum = rowNum;
+        _sheet.changeRowNum(this, rowNum);
     }
 
     /**
@@ -206,7 +209,7 @@ public class SXSSFRow implements Row, Co
     @Override
     public int getRowNum()
     {
-        return _sheet.getRowNum(this);
+        return _rowNum;
     }
 
     /**
@@ -393,15 +396,15 @@ public class SXSSFRow implements Row, Co
      */
     @Override
     public CellStyle getRowStyle() {
-       if(!isFormatted()) {
-        return null;
-    }
+        if(!isFormatted()) {
+            return null;
+        }
 
-       return getSheet().getWorkbook().getCellStyleAt(_style);
+        return getSheet().getWorkbook().getCellStyleAt(_style);
     }
 
     @Internal
-    /*package*/ int getRowStyleIndex() {
+        /*package*/ int getRowStyleIndex() {
         return _style;
     }
 
@@ -411,11 +414,11 @@ public class SXSSFRow implements Row, Co
      */
     @Override
     public void setRowStyle(CellStyle style) {
-       if(style == null) {
-          _style = -1;
-       } else {
-          _style = style.getIndex();
-       }
+        if(style == null) {
+            _style = -1;
+        } else {
+            _style = style.getIndex();
+        }
     }
 
     /**
@@ -437,8 +440,13 @@ public class SXSSFRow implements Row, Co
     {
         return _sheet;
     }
+
 //end of interface implementation
 
+    void setRowNumWithoutUpdatingSheet(int rowNum)
+    {
+        this._rowNum = rowNum;
+    }
 
     /**
      * Create an iterator over the cells from [0, getLastCellNum()).
@@ -543,7 +551,7 @@ public class SXSSFRow implements Row, Co
         SXSSFRow other = (SXSSFRow) obj;
 
         return (this.getRowNum() == other.getRowNum()) &&
-               (this.getSheet() == other.getSheet());
+                (this.getSheet() == other.getSheet());
     }
 
     @Override
@@ -563,4 +571,3 @@ public class SXSSFRow implements Row, Co
     }
 
 }
-

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java?rev=1884288&r1=1884287&r2=1884288&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java Thu Dec 10 18:18:51 2020
@@ -146,6 +146,7 @@ public class SXSSFSheet implements Sheet
         }
 
         SXSSFRow newRow = new SXSSFRow(this);
+        newRow.setRowNumWithoutUpdatingSheet(rownum);
         _rows.put(rownum, newRow);
         allFlushed = false;
         if(_randomAccessWindowSize >= 0 && _rows.size() > _randomAccessWindowSize) {
@@ -1293,8 +1294,8 @@ public class SXSSFSheet implements Sheet
      *
      * <p>
      *    groupRows requires all rows in the group to be in the current window.
-     *    This is not always practical.  Instead use setRowOutlineLevel to 
-     *    explicitly set the group level.  Level 1 is the top level group, 
+     *    This is not always practical.  Instead use setRowOutlineLevel to
+     *    explicitly set the group level.  Level 1 is the top level group,
      *    followed by 2, etc.  It is up to the user to ensure that level 2
      *    groups are correctly nested under level 1, etc.
      * </p>
@@ -1588,7 +1589,7 @@ public class SXSSFSheet implements Sheet
         // to recalculate the best-fit width for the flushed rows. This is an
         // inherent limitation of SXSSF. If having correct auto-sizing is
         // critical, the flushed rows would need to be re-read by the read-only
-        // XSSF eventmodel (SAX) or the memory-heavy XSSF usermodel (DOM). 
+        // XSSF eventmodel (SAX) or the memory-heavy XSSF usermodel (DOM).
         final int flushedWidth;
         try {
             // get the best fit width of rows already flushed to disk
@@ -1885,22 +1886,17 @@ public class SXSSFSheet implements Sheet
             lastFlushedRowNumber = rowIndex;
         }
     }
+
     public void changeRowNum(SXSSFRow row, int newRowNum)
     {
-
         removeRow(row);
-        _rows.put(newRowNum,row);
+        row.setRowNumWithoutUpdatingSheet(newRowNum);
+        _rows.put(newRowNum, row);
     }
 
     public int getRowNum(SXSSFRow row)
     {
-        for (Map.Entry<Integer, SXSSFRow> entry : _rows.entrySet()) {
-            if (entry.getValue() == row) {
-                return entry.getKey().intValue();
-            }
-        }
-
-        return -1;
+        return row.getRowNum();
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org