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>Preferences>Java>Code Generation>Code and Comments */ /** * @author rveliche * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>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]
