]> source.dussan.org Git - poi.git/commitdiff
Merged revisions 697145 via svnmerge from
authorJosh Micich <josh@apache.org>
Fri, 19 Sep 2008 16:47:18 +0000 (16:47 +0000)
committerJosh Micich <josh@apache.org>
Fri, 19 Sep 2008 16:47:18 +0000 (16:47 +0000)
https://svn.apache.org/repos/asf/poi/trunk

........
  r697145 | josh | 2008-09-19 09:34:21 -0700 (Fri, 19 Sep 2008) | 1 line

  Some clean-up after r696898 (partitioning common formula logic). Fixed compiler error in example XLS2CSVmra
........

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@697148 13f79535-47bb-0310-9956-ffa450edef68

src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java
src/java/org/apache/poi/ss/formula/FormulaRenderer.java

index 632eacf5cc5f295914e1f8914faa66af15ab3557..27b43206754f9ec2824cc79a9419377611c2eefe 100644 (file)
@@ -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.MissingRecordAwareHSSFListener;
 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 @@ public class XLS2CSVmra implements HSSFListener {
        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 @@ public class XLS2CSVmra implements HSSFListener {
                this.output = output;
                this.minColumns = minColumns;
        }
-       
+
        /**
         * Creates a new XLS -> CSV converter
         * @param filename The file to process
@@ -99,38 +100,38 @@ public class XLS2CSVmra implements HSSFListener {
                                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 @@ public class XLS2CSVmra implements HSSFListener {
                                }
                        }
                        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 @@ public class XLS2CSVmra implements HSSFListener {
                        thisColumn = mc.getColumn();
                        thisStr = "";
                }
-               
+
                // If we got something to print out, do so
                if(thisStr != null) {
                        if(thisColumn > 0) {
@@ -258,13 +259,13 @@ public class XLS2CSVmra implements HSSFListener {
                        }
                        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 @@ public class XLS2CSVmra implements HSSFListener {
                                        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();
        }
index c492c5e86ebe30cf112cb9b36c0158a184b2d5ac..1b19f8724770ead507d0c9a47acdfeef54144bf2 100644 (file)
 \r
 package org.apache.poi.hssf.model;\r
 \r
-import java.util.List;\r
-\r
 import org.apache.poi.hssf.record.formula.Ptg;\r
 import org.apache.poi.hssf.usermodel.HSSFEvaluationWorkbook;\r
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;\r
 import org.apache.poi.ss.formula.FormulaParser;\r
 import org.apache.poi.ss.formula.FormulaParsingWorkbook;\r
 import org.apache.poi.ss.formula.FormulaRenderer;\r
-import org.apache.poi.ss.formula.FormulaRenderingWorkbook;\r
+import org.apache.poi.ss.formula.FormulaType;\r
 \r
 /**\r
- * HSSF wrapper for the {@link FormulaParser}\r
+ * HSSF wrapper for the {@link FormulaParser} and {@link FormulaRenderer} \r
  * \r
  * @author Josh Micich\r
  */\r
@@ -42,30 +40,28 @@ public final class HSSFFormulaParser {
                // no instances of this class\r
        }\r
 \r
+       /**\r
+        * Convenience method for parsing cell formulas. see {@link #parse(String, HSSFWorkbook, int)}\r
+        */\r
        public static Ptg[] parse(String formula, HSSFWorkbook workbook) {\r
                return FormulaParser.parse(formula, createParsingWorkbook(workbook));\r
        }\r
 \r
+       /**\r
+        * @param formulaType a constant from {@link FormulaType}\r
+        * @return the parsed formula tokens\r
+        */\r
        public static Ptg[] parse(String formula, HSSFWorkbook workbook, int formulaType) {\r
                return FormulaParser.parse(formula, createParsingWorkbook(workbook), formulaType);\r
        }\r
 \r
-       public static String toFormulaString(HSSFWorkbook book, List lptgs) {\r
-               return toFormulaString(HSSFEvaluationWorkbook.create(book), lptgs);\r
-       }\r
        /**\r
-        * Convenience method which takes in a list then passes it to the\r
-        *  other toFormulaString signature.\r
-        * @param book   workbook for 3D and named references\r
-        * @param lptgs  list of Ptg, can be null or empty\r
+        * Static method to convert an array of {@link Ptg}s in RPN order\r
+        * to a human readable string format in infix mode.\r
+        * @param book  used for defined names and 3D references\r
+        * @param ptgs  must not be <code>null</code>\r
         * @return a human readable String\r
         */\r
-       public static String toFormulaString(FormulaRenderingWorkbook book, List lptgs) {\r
-               Ptg[] ptgs = new Ptg[lptgs.size()];\r
-               lptgs.toArray(ptgs);\r
-               return FormulaRenderer.toFormulaString(book, ptgs);\r
-       }\r
-    \r
        public static String toFormulaString(HSSFWorkbook book, Ptg[] ptgs) {\r
                return FormulaRenderer.toFormulaString(HSSFEvaluationWorkbook.create(book), ptgs);\r
        }\r
index 980c345d396b62e31635e4bfb36ff4c1e440caa2..b6293c785fe7265156ee95e0416aa0a0bd937088 100644 (file)
@@ -17,7 +17,6 @@
 \r
 package org.apache.poi.ss.formula;\r
 \r
-import java.util.List;\r
 import java.util.Stack;\r
 \r
 import org.apache.poi.hssf.record.formula.AttrPtg;\r
@@ -36,33 +35,17 @@ import org.apache.poi.hssf.record.formula.Ptg;
  * @author Josh Micich\r
  */\r
 public class FormulaRenderer {\r
-    /**\r
-     * Convenience method which takes in a list then passes it to the\r
-     *  other toFormulaString signature.\r
-     * @param book   workbook for 3D and named references\r
-     * @param lptgs  list of Ptg, can be null or empty\r
-     * @return a human readable String\r
-     */\r
-    public static String toFormulaString(FormulaRenderingWorkbook book, List lptgs) {\r
-        String retval = null;\r
-        if (lptgs == null || lptgs.size() == 0) return "#NAME";\r
-        Ptg[] ptgs = new Ptg[lptgs.size()];\r
-        ptgs = (Ptg[])lptgs.toArray(ptgs);\r
-        retval = toFormulaString(book, ptgs);\r
-        return retval;\r
-    }\r
     \r
     /**\r
-     * Static method to convert an array of Ptgs in RPN order\r
+     * Static method to convert an array of {@link Ptg}s in RPN order\r
      * to a human readable string format in infix mode.\r
-     * @param book  workbook for named and 3D references\r
-     * @param ptgs  array of Ptg, can be null or empty\r
+     * @param book  used for defined names and 3D references\r
+     * @param ptgs  must not be <code>null</code>\r
      * @return a human readable String\r
      */\r
     public static String toFormulaString(FormulaRenderingWorkbook book, Ptg[] ptgs) {\r
         if (ptgs == null || ptgs.length == 0) {\r
-            // TODO - what is the justification for returning "#NAME" (which is not "#NAME?", btw)\r
-            return "#NAME";\r
+            throw new IllegalArgumentException("ptgs must not be null");\r
         }\r
         Stack stack = new Stack();\r
 \r