Hi Rajesh.

Excel e.g. also opens text files with suffix .xls (and implicitly
converts them). Can you exclude such reasons?

In such cases you receive such messages.

The same effects you might have when opening files of incompatible Excel
versions. Possibly opening an XP Excel file in POI (Excel 97 - 2000)
might fail.

Regards,        Karl-Heinz.


-----Urspr�ngliche Nachricht-----
Von: news [mailto:[EMAIL PROTECTED] Im Auftrag von Rajesh
Gesendet: Dienstag, 26. Oktober 2004 14:38
An: [EMAIL PROTECTED]
Betreff: Exception when trying to read an Excel

Hi I get this message 


java.io.IOException: Unable to read entire block; 407 bytes read;
expected 512 
bytes
        at org.apache.poi.poifs.storage.RawDataBlock.<init>
(RawDataBlock.java:62)
        at org.apache.poi.poifs.storage.RawDataBlockList.<init>
(RawDataBlockList.java:51)
        at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>
(POIFSFileSystem.java:86)
        at EventExample.main(EventExample.java:137)
Exception in thread "main" 

When i try to open an excel. It works fine if I save the excel after
manually 
opening it.

Can some help??



import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

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.record.DateWindow1904Record;
import org.apache.poi.hssf.record.FormulaRecord;
import org.apache.poi.hssf.record.LabelSSTRecord;
import org.apache.poi.hssf.record.NumberRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.SSTRecord;
import org.apache.poi.hssf.record.StringRecord;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/*
 * Created on Oct 13, 2004
 *
 * To change the template for this generated file go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */

/**
 * @author rveliche
 *
 * To change the template for this generated type comment go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */

        /**
 * This example shows how to use the event API for reading a file.
 */
public class EventExample
                implements HSSFListener
{
        private SSTRecord sstrec;

        /**
         * This method listens for incoming records and handles them as 
required.
         * @param record    The record that was found while reading.
         */
        public void processRecord(Record record)
        {
                switch (record.getSid())
                {
                        // the BOFRecord can represent either the
beginning of 
a sheet or the workbook
/*                      case BOFRecord.sid:
                                BOFRecord bof = (BOFRecord) record;
                                if (bof.getType() == bof.TYPE_WORKBOOK)
                                {
                                        System.out.println("Encountered 
workbook");
                                        // assigned to the class level
member
                                } else if (bof.getType() ==
bof.TYPE_WORKSHEET)
                                {
                                        System.out.println("Encountered
sheet 
reference");
                                }
                                break;
                        case BoundSheetRecord.sid:
                                BoundSheetRecord bsr =
(BoundSheetRecord) 
record;
                                System.out.println("New sheet named: " +

bsr.getSheetname());
                                break;
                        case RowRecord.sid:
                                RowRecord rowrec = (RowRecord) record;
                                System.out.println("Row found, first
column at "
                                                + rowrec.getFirstCol() +
" last 
column at " + rowrec.getLastCol());
                                break;*/
                        case NumberRecord.sid:
                                                        NumberRecord
numrec = 
(NumberRecord) record;
        
System.out.println
("Cell found with value " + numrec.getValue()
        
+ " at 
row " + numrec.getRow() + " and column " + numrec.getColumn());
                                                        break;
                        
                                // SSTRecords store a array of unique
strings 
used in Excel.
                        case FormulaRecord.sid:
                                FormulaRecord frec = (FormulaRecord)
record;
                                Double dn = new Double(frec.getValue());
                                System.out.println("Formula found with
value " 
+ frec.getValue()
        
+ " at 
row " + frec.getRow() + " and column " + frec.getColumn());
                                System.out.println((frec.toString()));
                                if(dn.equals(new Double(Double.NaN))){
                                        System.out.println("NaN");
                                }
                                break;
                        case DateWindow1904Record.sid:
                                DateWindow1904Record drec = 
(DateWindow1904Record) record;
                                System.out.println("Date Format
Encountered");
                                break;
                        case SSTRecord.sid:
                                sstrec = (SSTRecord) record;
                                for (int k = 0; k <
sstrec.getNumUniqueStrings
(); k++)
                                {
                                //      System.out.println("String table

value " + k + " = " + sstrec.getString(k));
                                }
                                break;
                        case LabelSSTRecord.sid:
                                LabelSSTRecord lrec = (LabelSSTRecord)
record;
                                System.out.println("String cell found at
"+ 
lrec.getRow() +" and column "+lrec.getColumn()+"with value "
                                                + sstrec.getString
(lrec.getSSTIndex()));
                                break;
                        case StringRecord.sid:
                                StringRecord srec = (StringRecord)
record;
                                System.out.println("String found at with
value "
                                                + srec.getString());
                                break;
                }
        }

        /**
         * Read an excel file and spit out what we find.
         *
         * @param args      Expect one argument that is the file to
read.
         * @throws IOException  When there is an error processing the
file.
         */
        public static void main(String[] args) throws IOException
        {
                // create a new file input stream with the input file
specified
                // at the command line
                FileInputStream fis=new FileInputStream("locks.zip");
                ZipInputStream zin=new ZipInputStream(new
BufferedInputStream
(fis));
                ZipEntry ze;
                InputStream is = null;
                while((ze = zin.getNextEntry()) != null){
                        String s = ze.getName();
                        System.out.println(s);
                        if(s.equalsIgnoreCase
("locks/TypeK_New/DATA_TABLE/OKSAUTHTAB.xls")){
                                is = (InputStream) zin;
                                break;
                        }
                }
                FileInputStream fin = new
FileInputStream("ap0001a.xls");
                // create a new
org.apache.poi.poifs.filesystem.Filesystem
                BufferedInputStream bis = new BufferedInputStream(zin);
                POIFSFileSystem poifs = new POIFSFileSystem(bis);
                
                //HSSFWorkbook wb = new HSSFWorkbook(poifs);
                // get the Workbook (excel part) stream in a InputStream
                //System.out.println(wb.getSheetName(0));
                InputStream din =
poifs.createDocumentInputStream("Workbook");
                //POIFSDocument pd = new POIFSDocument("Workbook",zin);
                //DocumentInputStream din = new DocumentInputStream(pd);
                // construct out HSSFRequest object
                HSSFRequest req = new HSSFRequest();
                // lazy listen for ALL records with the listener shown
above
                req.addListenerForAllRecords(new EventExample());
                // create our event factory
                HSSFEventFactory factory = new HSSFEventFactory();
                // process our events based on the document input stream
                factory.processEvents(req, din);
                // once all the events are processed close our file
input stream
                fin.close();
                // and our document input stream (don't want to leak
these!)
                din.close();
                System.out.println("done.");
        }
}





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




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

Reply via email to