Author: nick
Date: Sun Jun 17 03:59:48 2007
New Revision: 548030

URL: http://svn.apache.org/viewvc?view=rev&rev=548030
Log:
Make a start on some example code to use MissingRecordAwareHSSFListener for 
turning a xls into a csv

Added:
    jakarta/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hssf/
    
jakarta/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hssf/eventusermodel/
    
jakarta/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hssf/eventusermodel/examples/
    
jakarta/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
   (with props)
Modified:
    
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java

Added: 
jakarta/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java?view=auto&rev=548030
==============================================================================
--- 
jakarta/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
 (added)
+++ 
jakarta/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
 Sun Jun 17 03:59:48 2007
@@ -0,0 +1,215 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   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;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintStream;
+
+import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
+import org.apache.poi.hssf.eventusermodel.HSSFListener;
+import org.apache.poi.hssf.eventusermodel.HSSFRequest;
+import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;
+import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
+import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
+import org.apache.poi.hssf.record.BlankRecord;
+import org.apache.poi.hssf.record.BoolErrRecord;
+import org.apache.poi.hssf.record.FormulaRecord;
+import org.apache.poi.hssf.record.LabelRecord;
+import org.apache.poi.hssf.record.LabelSSTRecord;
+import org.apache.poi.hssf.record.NoteRecord;
+import org.apache.poi.hssf.record.NumberRecord;
+import org.apache.poi.hssf.record.RKRecord;
+import org.apache.poi.hssf.record.Record;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+
+/**
+ * A XLS -> CSV processor, that uses the MissingRecordAware
+ *  EventModel code to ensure it outputs all columns and rows.
+ * @author Nick Burch
+ */
+public class XLS2CSVmra implements HSSFListener {
+       private int minColumns;
+       private POIFSFileSystem fs;
+       private PrintStream output;
+       
+       private int lastRowNumber;
+       private int lastColumnNumber;
+
+       /**
+        * Creates a new XLS -> CSV converter
+        * @param fs The POIFSFileSystem to process
+        * @param output The PrintStream to output the CSV to
+        * @param minColumns The minimum number of columns to output, or -1 for 
no minimum
+        */
+       public XLS2CSVmra(POIFSFileSystem fs, PrintStream output, int 
minColumns) {
+               this.fs = fs;
+               this.output = output;
+               this.minColumns = minColumns;
+       }
+       
+       /**
+        * Creates a new XLS -> CSV converter
+        * @param filename The file to process
+        * @param minColumns The minimum number of columns to output, or -1 for 
no minimum
+        * @throws IOException
+        * @throws FileNotFoundException
+        */
+       public XLS2CSVmra(String filename, int minColumns) throws IOException, 
FileNotFoundException {
+               this(
+                               new POIFSFileSystem(new 
FileInputStream(filename)),
+                               System.out, minColumns
+               );
+       }
+       
+       /**
+        * Initiates the processing of the XLS file to CSV
+        */
+       public void process() throws IOException {
+               MissingRecordAwareHSSFListener listener = new 
MissingRecordAwareHSSFListener(this);
+               HSSFEventFactory factory = new HSSFEventFactory();
+               HSSFRequest request = new HSSFRequest();
+               request.addListenerForAllRecords(listener);
+               
+               factory.processWorkbookEvents(request, fs);
+       }
+       
+       /**
+        * Main HSSFListener method, processes events, and outputs the
+        *  CSV as the file is processed. 
+        */
+       public void processRecord(Record record) {
+               int thisRow = -1;
+               int thisColumn = -1;
+               String thisStr = null;
+               
+               switch (record.getSid())
+        {
+        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();
+               thisStr = '"' + frec.toString() + '"';
+            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();
+            thisStr = '"' + "(TODO)" + '"';
+            break;
+        case NoteRecord.sid:
+               NoteRecord nrec = (NoteRecord) record;
+               
+               thisRow = nrec.getRow();
+               thisColumn = nrec.getColumn();
+               thisStr = '"' + "(TODO)" + '"';
+            break;
+        case NumberRecord.sid:
+            NumberRecord numrec = (NumberRecord) record;
+            
+            thisRow = numrec.getRow();
+            thisColumn = numrec.getColumn();
+            thisStr = Double.toString(numrec.getValue()); // TODO: Formatting
+            break;
+        case RKRecord.sid:
+               RKRecord rkrec = (RKRecord) record;
+               
+               thisRow = rkrec.getRow();
+               thisColumn = rkrec.getColumn();
+               thisStr = '"' + "(TODO)" + '"';
+               break;
+        default:
+               break;
+        }
+               
+               // Handle missing column
+               if(record instanceof MissingCellDummyRecord) {
+                       MissingCellDummyRecord mc = 
(MissingCellDummyRecord)record;
+                       thisRow = mc.getRow();
+                       thisColumn = mc.getColumn();
+                       thisStr = "";
+               }
+               
+               // If we got something to print out, do so
+               if(thisStr != null) {
+                       if(thisColumn > 0) {
+                               output.print(',');
+                       }
+                       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
+                       if(minColumns > 0) {
+                               for(int i=lastColumnNumber; i<(minColumns-1); 
i++) {
+                                       output.print(',');
+                               }
+                       }
+                       
+                       // 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();
+       }
+}

Propchange: 
jakarta/poi/trunk/src/scratchpad/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java
URL: 
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java?view=diff&rev=548030&r1=548029&r2=548030
==============================================================================
--- 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java
 (original)
+++ 
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java
 Sun Jun 17 03:59:48 2007
@@ -110,14 +110,17 @@
                BlankRecord brec = (BlankRecord) record;
                 thisRow = brec.getRow();
                 thisColumn = brec.getColumn();
+                break;
             case BoolErrRecord.sid:
                BoolErrRecord berec = (BoolErrRecord) record;
                 thisRow = berec.getRow();
                 thisColumn = berec.getColumn();
+                break;
             case FormulaRecord.sid:
                FormulaRecord frec = (FormulaRecord) record;
                thisRow = frec.getRow();
                thisColumn = frec.getColumn();
+                break;
             case LabelRecord.sid:
                LabelRecord lrec = (LabelRecord) record;
                 thisRow = lrec.getRow();
@@ -136,6 +139,7 @@
                NoteRecord nrec = (NoteRecord) record;
                thisRow = nrec.getRow();
                thisColumn = nrec.getColumn();
+                break;
             case NumberRecord.sid:
                 NumberRecord numrec = (NumberRecord) record;
                 thisRow = numrec.getRow();
@@ -147,11 +151,11 @@
                RKRecord rkrec = (RKRecord) record;
                thisRow = rkrec.getRow();
                thisColumn = rkrec.getColumn();
+                break;
             default:
                //System.out.println(record.getClass());
                break;
         }
-       System.out.println(record.getClass());
                
                // Do we need to fire dummy end-of-row records?
                if(thisRow != lastSeenRow) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to