]> source.dussan.org Git - poi.git/commitdiff
Bugzilla 51673 - support grouping rows in SXSSF
authorYegor Kozlov <yegor@apache.org>
Wed, 29 Feb 2012 10:36:11 +0000 (10:36 +0000)
committerYegor Kozlov <yegor@apache.org>
Wed, 29 Feb 2012 10:36:11 +0000 (10:36 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1295058 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java
src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java

index 538273a20ed43b0b9eb9e2f40a2e2e13e1e66c46..e374a544dc3eb18e2841613aca54922048013b0f 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta6" date="2012-??-??">
+           <action dev="poi-developers" type="add">51673 - support grouping rows in SXSSF</action>
            <action dev="poi-developers" type="add">51780 - support replacement of content types in OPC packages </action>
            <action dev="poi-developers" type="fix">52784 - replace ISO control characters with question marks in SXSSF to be consistent with XSSF </action>
            <action dev="poi-developers" type="add">52057 - updated formula test framework to be aware of recently added Functions </action>
index 341f56b833050e8c097929b287cd05c7a3825d9f..1bd53bc8b29e6d006a6c8bc5408851459044b469 100644 (file)
@@ -25,7 +25,6 @@ import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 
 /**
  * Streaming version of XSSFRow implementing the "BigGridDemo" strategy.
@@ -40,6 +39,7 @@ public class SXSSFRow implements Row
     short _style=-1;
     short _height=-1;
     boolean _zHeight = false;
+    int _outlineLevel = 0;   // Outlining level of the row, when outlining is on
 
     public SXSSFRow(SXSSFSheet sheet, int initialSize)
     {
@@ -54,6 +54,14 @@ public class SXSSFRow implements Row
     {
         return _height!=-1;
     }
+
+    int getOutlineLevel(){
+        return _outlineLevel;
+    }
+    void setOutlineLevel(int level){
+        _outlineLevel = level;
+    }
+
 //begin of interface implementation
     public Iterator<Cell> iterator()
     {
index 5e2aba7b0a650728be4dde19fe9ab0527b13715e..0311ec55fb5083124e2c6f4dc77414eebda28b0b 100644 (file)
@@ -26,11 +26,12 @@ import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.usermodel.*;
 
 import org.apache.poi.ss.util.SheetUtil;
-import org.apache.poi.util.Internal;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 
 import org.apache.poi.hssf.util.PaneInformation;
 import org.apache.poi.ss.util.CellRangeAddress;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetFormatPr;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
 
 /**
  * Streaming version of XSSFSheet implementing the "BigGridDemo" strategy.
@@ -44,6 +45,7 @@ public class SXSSFSheet implements Sheet, Cloneable
     TreeMap<Integer,SXSSFRow> _rows=new TreeMap<Integer,SXSSFRow>();
     SheetDataWriter _writer;
     int _randomAccessWindowSize = SXSSFWorkbook.DEFAULT_WINDOW_SIZE;
+    int outlineLevelRow = 0;
 
     public SXSSFSheet(SXSSFWorkbook workbook, XSSFSheet xSheet) throws IOException
     {
@@ -1036,7 +1038,18 @@ public class SXSSFSheet implements Sheet, Cloneable
      */
     public void groupRow(int fromRow, int toRow)
     {
-        _sh.groupRow(fromRow, toRow);
+        for(SXSSFRow row : _rows.subMap(fromRow, toRow + 1).values()){
+            int level = row.getOutlineLevel() + 1;
+            row.setOutlineLevel(level);
+
+            if(level > outlineLevelRow) outlineLevelRow = level;
+        }
+
+        CTWorksheet ct = _sh.getCTWorksheet();
+        CTSheetFormatPr pr = ct.isSetSheetFormatPr() ?
+                ct.getSheetFormatPr() :
+                ct.addNewSheetFormatPr();
+        pr.setOutlineLevelRow((short)outlineLevelRow);
     }
 
     /**
@@ -1058,7 +1071,8 @@ public class SXSSFSheet implements Sheet, Cloneable
      */
     public void setRowGroupCollapsed(int row, boolean collapse)
     {
-        _sh.setRowGroupCollapsed(row, collapse);
+        //_sh.setRowGroupCollapsed(row, collapse);
+        throw new RuntimeException("Not Implemented");
     }
 
     /**
index c9a34a4630713aa32d336c5a0e62e0b1ef950dac..1823fec798e91fd9f8e78967521fdf74ae9c907c 100644 (file)
@@ -137,6 +137,9 @@ public class SheetDataWriter {
             _out.write(" s=\"" + row._style + "\"");\r
             _out.write(" customFormat=\"1\"");\r
         }\r
+        if (row.getOutlineLevel() != 0) {\r
+            _out.write(" outlineLevel=\"" + row.getOutlineLevel() + "\"");\r
+        }\r
         _out.write(">\n");\r
         this._rownum = rownum;\r
         _rowContainedNullCells = false;\r