You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by jo...@apache.org on 2008/09/19 18:34:21 UTC
svn commit: r697145 - in /poi/trunk/src:
examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
java/org/apache/poi/hssf/model/HSSFFormulaParser.java
java/org/apache/poi/ss/formula/FormulaRenderer.java
Author: josh
Date: Fri Sep 19 09:34:21 2008
New Revision: 697145
URL: http://svn.apache.org/viewvc?rev=697145&view=rev
Log:
Some clean-up after r696898 (partitioning common formula logic). Fixed compiler error in example XLS2CSVmra
Modified:
poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
poi/trunk/src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java
poi/trunk/src/java/org/apache/poi/ss/formula/FormulaRenderer.java
Modified: poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java?rev=697145&r1=697144&r2=697145&view=diff
==============================================================================
--- poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java (original)
+++ poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java Fri Sep 19 09:34:21 2008
@@ -14,6 +14,7 @@
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
+
package org.apache.poi.hssf.eventusermodel.examples;
import java.io.FileInputStream;
@@ -29,7 +30,7 @@
import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder.SheetRecordCollectingListener;
import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
-import org.apache.poi.hssf.model.FormulaParser;
+import org.apache.poi.hssf.model.HSSFFormulaParser;
import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BlankRecord;
import org.apache.poi.hssf.record.BoolErrRecord;
@@ -54,21 +55,21 @@
private int minColumns;
private POIFSFileSystem fs;
private PrintStream output;
-
+
private int lastRowNumber;
private int lastColumnNumber;
-
+
/** Should we output the formula, or the value it has? */
private boolean outputFormulaValues = true;
-
+
/** For parsing Formulas */
private SheetRecordCollectingListener workbookBuildingListener;
private HSSFWorkbook stubWorkbook;
-
+
// Records we pick up as we process
private SSTRecord sstRecord;
private FormatTrackingHSSFListener formatListener;
-
+
// For handling formulas with string results
private int nextRow;
private int nextColumn;
@@ -85,7 +86,7 @@
this.output = output;
this.minColumns = minColumns;
}
-
+
/**
* Creates a new XLS -> CSV converter
* @param filename The file to process
@@ -99,38 +100,38 @@
System.out, minColumns
);
}
-
+
/**
* Initiates the processing of the XLS file to CSV
*/
public void process() throws IOException {
MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);
- formatListener = new FormatTrackingHSSFListener(listener);
-
+ formatListener = new FormatTrackingHSSFListener(listener);
+
HSSFEventFactory factory = new HSSFEventFactory();
HSSFRequest request = new HSSFRequest();
-
+
if(outputFormulaValues) {
request.addListenerForAllRecords(formatListener);
} else {
workbookBuildingListener = new SheetRecordCollectingListener(formatListener);
request.addListenerForAllRecords(workbookBuildingListener);
}
-
+
factory.processWorkbookEvents(request, fs);
}
-
+
/**
* Main HSSFListener method, processes events, and outputs the
- * CSV as the file is processed.
+ * CSV as the file is processed.
*/
public void processRecord(Record record) {
int thisRow = -1;
int thisColumn = -1;
String thisStr = null;
-
+
switch (record.getSid())
- {
+ {
case BOFRecord.sid:
BOFRecord br = (BOFRecord)record;
if(br.getType() == BOFRecord.TYPE_WORKSHEET) {
@@ -140,109 +141,109 @@
}
}
break;
-
+
case SSTRecord.sid:
sstRecord = (SSTRecord) record;
break;
-
- case BlankRecord.sid:
- BlankRecord brec = (BlankRecord) record;
-
- thisRow = brec.getRow();
- thisColumn = brec.getColumn();
- thisStr = "";
- break;
- case BoolErrRecord.sid:
- BoolErrRecord berec = (BoolErrRecord) record;
-
- thisRow = berec.getRow();
- thisColumn = berec.getColumn();
- thisStr = "";
- break;
-
- case FormulaRecord.sid:
- FormulaRecord frec = (FormulaRecord) record;
-
- thisRow = frec.getRow();
- thisColumn = frec.getColumn();
-
- if(outputFormulaValues) {
- if(Double.isNaN( frec.getValue() )) {
- // Formula result is a string
- // This is stored in the next record
- outputNextStringRecord = true;
- nextRow = frec.getRow();
- nextColumn = frec.getColumn();
- } else {
- thisStr = formatListener.formatNumberDateCell(frec);
- }
- } else {
- thisStr = '"' +
- FormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"';
- }
- break;
- case StringRecord.sid:
- if(outputNextStringRecord) {
- // String for formula
- StringRecord srec = (StringRecord)record;
- thisStr = srec.getString();
- thisRow = nextRow;
- thisColumn = nextColumn;
- outputNextStringRecord = false;
- }
- break;
-
- case LabelRecord.sid:
- LabelRecord lrec = (LabelRecord) record;
-
- thisRow = lrec.getRow();
- thisColumn = lrec.getColumn();
- thisStr = '"' + lrec.getValue() + '"';
- break;
- case LabelSSTRecord.sid:
- LabelSSTRecord lsrec = (LabelSSTRecord) record;
-
- thisRow = lsrec.getRow();
- thisColumn = lsrec.getColumn();
- if(sstRecord == null) {
- thisStr = '"' + "(No SST Record, can't identify string)" + '"';
- } else {
- thisStr = '"' + sstRecord.getString(lsrec.getSSTIndex()).toString() + '"';
- }
- break;
- case NoteRecord.sid:
- NoteRecord nrec = (NoteRecord) record;
-
- thisRow = nrec.getRow();
- thisColumn = nrec.getColumn();
- // TODO: Find object to match nrec.getShapeId()
- thisStr = '"' + "(TODO)" + '"';
- break;
- case NumberRecord.sid:
- NumberRecord numrec = (NumberRecord) record;
-
- thisRow = numrec.getRow();
- thisColumn = numrec.getColumn();
-
- // Format
- thisStr = formatListener.formatNumberDateCell(numrec);
- break;
- case RKRecord.sid:
- RKRecord rkrec = (RKRecord) record;
-
- thisRow = rkrec.getRow();
- thisColumn = rkrec.getColumn();
- thisStr = '"' + "(TODO)" + '"';
- break;
- default:
- break;
- }
-
+
+ case BlankRecord.sid:
+ BlankRecord brec = (BlankRecord) record;
+
+ thisRow = brec.getRow();
+ thisColumn = brec.getColumn();
+ thisStr = "";
+ break;
+ case BoolErrRecord.sid:
+ BoolErrRecord berec = (BoolErrRecord) record;
+
+ thisRow = berec.getRow();
+ thisColumn = berec.getColumn();
+ thisStr = "";
+ break;
+
+ case FormulaRecord.sid:
+ FormulaRecord frec = (FormulaRecord) record;
+
+ thisRow = frec.getRow();
+ thisColumn = frec.getColumn();
+
+ if(outputFormulaValues) {
+ if(Double.isNaN( frec.getValue() )) {
+ // Formula result is a string
+ // This is stored in the next record
+ outputNextStringRecord = true;
+ nextRow = frec.getRow();
+ nextColumn = frec.getColumn();
+ } else {
+ thisStr = formatListener.formatNumberDateCell(frec);
+ }
+ } else {
+ thisStr = '"' +
+ HSSFFormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"';
+ }
+ break;
+ case StringRecord.sid:
+ if(outputNextStringRecord) {
+ // String for formula
+ StringRecord srec = (StringRecord)record;
+ thisStr = srec.getString();
+ thisRow = nextRow;
+ thisColumn = nextColumn;
+ outputNextStringRecord = false;
+ }
+ break;
+
+ case LabelRecord.sid:
+ LabelRecord lrec = (LabelRecord) record;
+
+ thisRow = lrec.getRow();
+ thisColumn = lrec.getColumn();
+ thisStr = '"' + lrec.getValue() + '"';
+ break;
+ case LabelSSTRecord.sid:
+ LabelSSTRecord lsrec = (LabelSSTRecord) record;
+
+ thisRow = lsrec.getRow();
+ thisColumn = lsrec.getColumn();
+ if(sstRecord == null) {
+ thisStr = '"' + "(No SST Record, can't identify string)" + '"';
+ } else {
+ thisStr = '"' + sstRecord.getString(lsrec.getSSTIndex()).toString() + '"';
+ }
+ break;
+ case NoteRecord.sid:
+ NoteRecord nrec = (NoteRecord) record;
+
+ thisRow = nrec.getRow();
+ thisColumn = nrec.getColumn();
+ // TODO: Find object to match nrec.getShapeId()
+ thisStr = '"' + "(TODO)" + '"';
+ break;
+ case NumberRecord.sid:
+ NumberRecord numrec = (NumberRecord) record;
+
+ thisRow = numrec.getRow();
+ thisColumn = numrec.getColumn();
+
+ // Format
+ thisStr = formatListener.formatNumberDateCell(numrec);
+ break;
+ case RKRecord.sid:
+ RKRecord rkrec = (RKRecord) record;
+
+ thisRow = rkrec.getRow();
+ thisColumn = rkrec.getColumn();
+ thisStr = '"' + "(TODO)" + '"';
+ break;
+ default:
+ break;
+ }
+
// Handle new row
if(thisRow != -1 && thisRow != lastRowNumber) {
lastColumnNumber = -1;
}
-
+
// Handle missing column
if(record instanceof MissingCellDummyRecord) {
MissingCellDummyRecord mc = (MissingCellDummyRecord)record;
@@ -250,7 +251,7 @@
thisColumn = mc.getColumn();
thisStr = "";
}
-
+
// If we got something to print out, do so
if(thisStr != null) {
if(thisColumn > 0) {
@@ -258,13 +259,13 @@
}
output.print(thisStr);
}
-
+
// Update column and row count
if(thisRow > -1)
lastRowNumber = thisRow;
if(thisColumn > -1)
lastColumnNumber = thisColumn;
-
+
// Handle end of row
if(record instanceof LastCellOfRowDummyRecord) {
// Print out any missing commas if needed
@@ -275,27 +276,27 @@
output.print(',');
}
}
-
+
// We're onto a new row
lastColumnNumber = -1;
-
+
// End the row
output.println();
}
}
-
+
public static void main(String[] args) throws Exception {
if(args.length < 1) {
System.err.println("Use:");
System.err.println(" XLS2CSVmra <xls file> [min columns]");
System.exit(1);
}
-
+
int minColumns = -1;
if(args.length >= 2) {
minColumns = Integer.parseInt(args[1]);
}
-
+
XLS2CSVmra xls2csv = new XLS2CSVmra(args[0], minColumns);
xls2csv.process();
}
Modified: poi/trunk/src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java?rev=697145&r1=697144&r2=697145&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java Fri Sep 19 09:34:21 2008
@@ -17,18 +17,16 @@
package org.apache.poi.hssf.model;
-import java.util.List;
-
import org.apache.poi.hssf.record.formula.Ptg;
import org.apache.poi.hssf.usermodel.HSSFEvaluationWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.formula.FormulaParser;
import org.apache.poi.ss.formula.FormulaParsingWorkbook;
import org.apache.poi.ss.formula.FormulaRenderer;
-import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
+import org.apache.poi.ss.formula.FormulaType;
/**
- * HSSF wrapper for the {@link FormulaParser}
+ * HSSF wrapper for the {@link FormulaParser} and {@link FormulaRenderer}
*
* @author Josh Micich
*/
@@ -42,30 +40,28 @@
// no instances of this class
}
+ /**
+ * Convenience method for parsing cell formulas. see {@link #parse(String, HSSFWorkbook, int)}
+ */
public static Ptg[] parse(String formula, HSSFWorkbook workbook) {
return FormulaParser.parse(formula, createParsingWorkbook(workbook));
}
+ /**
+ * @param formulaType a constant from {@link FormulaType}
+ * @return the parsed formula tokens
+ */
public static Ptg[] parse(String formula, HSSFWorkbook workbook, int formulaType) {
return FormulaParser.parse(formula, createParsingWorkbook(workbook), formulaType);
}
- public static String toFormulaString(HSSFWorkbook book, List lptgs) {
- return toFormulaString(HSSFEvaluationWorkbook.create(book), lptgs);
- }
/**
- * Convenience method which takes in a list then passes it to the
- * other toFormulaString signature.
- * @param book workbook for 3D and named references
- * @param lptgs list of Ptg, can be null or empty
+ * Static method to convert an array of {@link Ptg}s in RPN order
+ * to a human readable string format in infix mode.
+ * @param book used for defined names and 3D references
+ * @param ptgs must not be <code>null</code>
* @return a human readable String
*/
- public static String toFormulaString(FormulaRenderingWorkbook book, List lptgs) {
- Ptg[] ptgs = new Ptg[lptgs.size()];
- lptgs.toArray(ptgs);
- return FormulaRenderer.toFormulaString(book, ptgs);
- }
-
public static String toFormulaString(HSSFWorkbook book, Ptg[] ptgs) {
return FormulaRenderer.toFormulaString(HSSFEvaluationWorkbook.create(book), ptgs);
}
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/FormulaRenderer.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/FormulaRenderer.java?rev=697145&r1=697144&r2=697145&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/FormulaRenderer.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/FormulaRenderer.java Fri Sep 19 09:34:21 2008
@@ -17,7 +17,6 @@
package org.apache.poi.ss.formula;
-import java.util.List;
import java.util.Stack;
import org.apache.poi.hssf.record.formula.AttrPtg;
@@ -36,33 +35,17 @@
* @author Josh Micich
*/
public class FormulaRenderer {
- /**
- * Convenience method which takes in a list then passes it to the
- * other toFormulaString signature.
- * @param book workbook for 3D and named references
- * @param lptgs list of Ptg, can be null or empty
- * @return a human readable String
- */
- public static String toFormulaString(FormulaRenderingWorkbook book, List lptgs) {
- String retval = null;
- if (lptgs == null || lptgs.size() == 0) return "#NAME";
- Ptg[] ptgs = new Ptg[lptgs.size()];
- ptgs = (Ptg[])lptgs.toArray(ptgs);
- retval = toFormulaString(book, ptgs);
- return retval;
- }
/**
- * Static method to convert an array of Ptgs in RPN order
+ * Static method to convert an array of {@link Ptg}s in RPN order
* to a human readable string format in infix mode.
- * @param book workbook for named and 3D references
- * @param ptgs array of Ptg, can be null or empty
+ * @param book used for defined names and 3D references
+ * @param ptgs must not be <code>null</code>
* @return a human readable String
*/
public static String toFormulaString(FormulaRenderingWorkbook book, Ptg[] ptgs) {
if (ptgs == null || ptgs.length == 0) {
- // TODO - what is the justification for returning "#NAME" (which is not "#NAME?", btw)
- return "#NAME";
+ throw new IllegalArgumentException("ptgs must not be null");
}
Stack stack = new Stack();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org