aboutsummaryrefslogtreecommitdiffstats
path: root/src/ooxml
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2011-06-08 12:38:07 +0000
committerYegor Kozlov <yegor@apache.org>2011-06-08 12:38:07 +0000
commit8c530958ddc169eb275a31bd6429332fe9a3c78e (patch)
tree5ed9ece3c1314691cbb042cf015cd2c5a6010217 /src/ooxml
parent40d78fba877ab5123beeb7438bbe4e51f8a468e8 (diff)
downloadpoi-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.java16
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java46
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;
}