diff options
author | Yegor Kozlov <yegor@apache.org> | 2012-02-29 10:36:11 +0000 |
---|---|---|
committer | Yegor Kozlov <yegor@apache.org> | 2012-02-29 10:36:11 +0000 |
commit | ed05f24b6c5b8182fdc645ed8a9c99581d5bef0a (patch) | |
tree | 980f81cf1502e2c22a468161fc7f4c4a0139c358 | |
parent | afaf6472d0c580f06598bb2ea55c55cd3d1fcf16 (diff) | |
download | poi-ed05f24b6c5b8182fdc645ed8a9c99581d5bef0a.tar.gz poi-ed05f24b6c5b8182fdc645ed8a9c99581d5bef0a.zip |
Bugzilla 51673 - support grouping rows in SXSSF
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1295058 13f79535-47bb-0310-9956-ffa450edef68
4 files changed, 30 insertions, 4 deletions
diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 538273a20e..e374a544dc 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -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> diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java index 341f56b833..1bd53bc8b2 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java @@ -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() { diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java index 5e2aba7b0a..0311ec55fb 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java @@ -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"); } /** diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java index c9a34a4630..1823fec798 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java @@ -137,6 +137,9 @@ public class SheetDataWriter { _out.write(" s=\"" + row._style + "\"");
_out.write(" customFormat=\"1\"");
}
+ if (row.getOutlineLevel() != 0) {
+ _out.write(" outlineLevel=\"" + row.getOutlineLevel() + "\"");
+ }
_out.write(">\n");
this._rownum = rownum;
_rowContainedNullCells = false;
|