poi-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From n...@apache.org
Subject svn commit: r548030 - in /jakarta/poi/trunk/src/scratchpad: examples/src/org/apache/poi/hssf/ examples/src/org/apache/poi/hssf/eventusermodel/ examples/src/org/apache/poi/hssf/eventusermodel/examples/ src/org/apache/poi/hssf/eventusermodel/
Date Sun, 17 Jun 2007 10:59:53 GMT
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: dev-unsubscribe@poi.apache.org
For additional commands, e-mail: dev-help@poi.apache.org


Mime
View raw message