diff options
author | Yegor Kozlov <yegor@apache.org> | 2011-06-08 12:38:07 +0000 |
---|---|---|
committer | Yegor Kozlov <yegor@apache.org> | 2011-06-08 12:38:07 +0000 |
commit | 8c530958ddc169eb275a31bd6429332fe9a3c78e (patch) | |
tree | 5ed9ece3c1314691cbb042cf015cd2c5a6010217 /src/ooxml | |
parent | 40d78fba877ab5123beeb7438bbe4e51f8a468e8 (diff) | |
download | poi-8c530958ddc169eb275a31bd6429332fe9a3c78e.tar.gz poi-8c530958ddc169eb275a31bd6429332fe9a3c78e.zip |
SXSSF documentation and polishing
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1133372 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml')
-rw-r--r-- | src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java | 16 | ||||
-rw-r--r-- | src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java | 46 |
2 files changed, 52 insertions, 10 deletions
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 be90606e1b..baea693418 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java @@ -17,15 +17,10 @@ package org.apache.poi.xssf.streaming; +import java.io.*; import java.util.Iterator; import java.util.TreeMap; import java.util.Map; -import java.io.Writer; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.FileInputStream; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellReference; @@ -46,7 +41,7 @@ public class SXSSFSheet implements Sheet, Cloneable XSSFSheet _sh; TreeMap<Integer,SXSSFRow> _rows=new TreeMap<Integer,SXSSFRow>(); SheetDataWriter _writer; - int _randomAccessWindowSize=5000; + int _randomAccessWindowSize = SXSSFWorkbook.DEFAULT_WINDOW_SIZE; public SXSSFSheet(SXSSFWorkbook workbook,XSSFSheet xSheet) throws IOException { @@ -1243,7 +1238,7 @@ public class SXSSFSheet implements Sheet, Cloneable { _fd = File.createTempFile("sheet", ".xml"); _fd.deleteOnExit(); - _out = new FileWriter(_fd); + _out = new BufferedWriter(new FileWriter(_fd)); _out.write("<sheetData>\n"); } public int getNumberOfFlushedRows() @@ -1262,9 +1257,10 @@ public class SXSSFSheet implements Sheet, Cloneable { _fd.delete(); } - public InputStream getWorksheetXMLInputStream() throws IOException + public InputStream getWorksheetXMLInputStream() throws IOException { _out.write("</sheetData>"); + _out.flush(); _out.close(); return new FileInputStream(_fd); } @@ -1275,7 +1271,7 @@ public class SXSSFSheet implements Sheet, Cloneable * @param rownum 0-based row number * @param row a row */ - public void writeRow(int rownum,SXSSFRow row) throws IOException + public void writeRow(int rownum,SXSSFRow row) throws IOException { if(_numberOfFlushedRows==0) _lowestIndexOfFlushedRows=rownum; diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java index aa17b536a0..365e58b337 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java @@ -50,11 +50,56 @@ import org.apache.poi.ss.usermodel.Row.MissingCellPolicy; */ public class SXSSFWorkbook implements Workbook { + /** + * Specifies how many rows can be accessed at most via getRow(). + * When a new node is created via createRow() and the total number + * of unflushed records would exeed the specified value, then the + * row with the lowest index value is flushed and cannot be accessed + * via getRow() anymore. + */ + public static final int DEFAULT_WINDOW_SIZE = 100; + XSSFWorkbook _wb=new XSSFWorkbook(); HashMap<SXSSFSheet,XSSFSheet> _sxFromXHash=new HashMap<SXSSFSheet,XSSFSheet>(); HashMap<XSSFSheet,SXSSFSheet> _xFromSxHash=new HashMap<XSSFSheet,SXSSFSheet>(); + int _randomAccessWindowSize = DEFAULT_WINDOW_SIZE; + + /** + * Construct a new workbook + */ + public SXSSFWorkbook(){ + + } + + /** + * Construct an empty workbook and specify the window for row access. + * <p> + * When a new node is created via createRow() and the total number + * of unflushed records would exeed the specified value, then the + * row with the lowest index value is flushed and cannot be accessed + * via getRow() anymore. + * </p> + * <p> + * A value of -1 indicates unlimited access. In this case all + * records that have not been flushed by a call to flush() are available + * for random access. + * <p> + * <p></p> + * A value of 0 is not allowed because it would flush any newly created row + * without having a chance to specify any cells. + * </p> + * + * @param rowAccessWindowSize + */ + public SXSSFWorkbook(int rowAccessWindowSize){ + if(rowAccessWindowSize == 0 || rowAccessWindowSize < -1) { + throw new IllegalArgumentException("rowAccessWindowSize must be greater than 0 or -1"); + } + _randomAccessWindowSize = rowAccessWindowSize; + } + XSSFSheet getXSSFSheet(SXSSFSheet sheet) { XSSFSheet result=_sxFromXHash.get(sheet); @@ -303,6 +348,7 @@ public class SXSSFWorkbook implements Workbook { throw new RuntimeException(ioe); } + sxSheet.setRandomAccessWindowSize(_randomAccessWindowSize); registerSheetMapping(sxSheet,xSheet); return sxSheet; } |