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