Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di gio@
    Registrato dal
    Aug 2014
    Messaggi
    6

    lettura file excel (.xls)

    Ciao a tutti,
    ho un problema in quanto non riesco a leggere il contenuto di un file excel (.xls) generato con Open Office da un codice java.
    Utilizzo Eclipse versione 2.01.
    Il codice apparentemente non presente errori ma quando lancio la compilazione viene emessa la seguente eccezione:
    "Exception in thread "main" java.lang.NullPointerException at readerexcel.readexcel_1.main(readexcel_1.java:16)"
    La riga 16 corrisponde al seguente codice: "Iterator<Row> rowIterator = sheet.iterator();"
    Potete aiutarmi?
    Grazie!


    codice:
    package readerexcel;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Iterator;
    import jxl.Cell;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    public class readexcel_1 {	
    	public static void main(String[] args)  {
    	try {
    	FileInputStream file = new FileInputStream(new File("D:\\prova.xls")); 
    	HSSFWorkbook workbook = new HSSFWorkbook(file);
    	HSSFSheet sheet = workbook.getSheetAt(0);
    	Iterator<Row> rowIterator = sheet.iterator();
    	Iterator<jxl.Cell> cellIterator = Row.cellIterator();
    	while(rowIterator.hasNext() & cellIterator.hasNext()) {
    			Cell cell = cellIterator.next();
    			switch(cell.getCellType()) {
    				case Cell.CELL_TYPE_BOOLEAN:
    					System.out.print(cell.getBooleanCellValue() + "\t\t");
    					break;
    			}
    			switch(cell.getCellType()) {
    				case Cell.CELL_TYPE_NUMERIC:
    					System.out.print(cell.getNumericCellValue() + "\t\t");
    					break;
    			}
    			switch(cell.getCellType()) {
    				case Cell.CELL_TYPE_STRING:
    					System.out.print(cell.getStringCellValue() + "\t\t");
    					break;
    			}
    		}
    		System.out.println("");
    	file.close();
    } catch (FileNotFoundException e) {
    	e.printStackTrace();
    } catch (IOException e) {
    	e.printStackTrace();
    }
    	}
    }

  2. #2
    Mi sembra strano che usi due librerie distinte.
    codice:
    import jxl.Cell;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    usi la JXL e le librerie di Apache POI (HSSF) per un solo fine.
    Tutto dovrebbe appartenere alla stessa libreria e non fare un fritto misto
    Infatti poi:
    codice:
     Iterator<Row> rowIterator = sheet.iterator();
     Iterator<jxl.Cell> cellIterator = Row.cellIterator();
    Usi due iterator di due librerie diverse.
    Ovviamente una delle due è in nullPointerException (la seconda).


    Ciao
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Utente di HTML.it L'avatar di gio@
    Registrato dal
    Aug 2014
    Messaggi
    6
    Ciao e grazie per la risposta,
    ho provato a riscrivere il codice anche consultando il seguente link: http://forum.html.it/forum/showthread/t-1081772.html
    ma lancia ancora la seguente eccezione:
    Exception in thread "main" java.lang.NullPointerException
    at readerexcel.readexcel_1.main(readexcel_1.java:20)

    Cosa posso fare?

    Questo è il codice riscritto
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;

    import jxl.Cell;
    import jxl.Workbook;


    public class readexcel_1 {


    public static void main(String[] args) throws Exception {

    String buff = "";

    Workbook workbook = Workbook.getWorkbook(new File("D:\\prova.xls"));

    Sheet sheet = workbook.getSheet(0);
    boolean flag1 = true;
    boolean flag2 = true;
    int riga = 0;
    Cell currentCell;
    while (flag1) {
    int cella = 0;
    while (flag2) {
    currentCell = sheet.getCell(cella, riga);
    flag2 = currentCell.getContents() == "" ? false : true;
    }
    BufferedWriter br = new BufferedWriter(new FileWriter("D:\\letto.txt"));
    br.write(buff);
    br.flush();
    br.close();
    }
    }
    }

  4. #4
    perché aprire due discussioni con lo stesso tema?

    Inoltre hai la minima idea di quello che stai scrivendo?!?
    Hai studiato o stai studiando da qualche testo/guida?
    Ultima modifica di schumy2000; 30-09-2014 a 09:19
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  5. #5
    Utente di HTML.it L'avatar di gio@
    Registrato dal
    Aug 2014
    Messaggi
    6
    Ciao,
    hai ragione ma sto provando a vedere se i codici vengono compilati.
    sto studiando sul Manuale di Java 8 di Claudio De Sio e su un manuale di Java Swing.
    Ho provato a riscrivere il codice come segue:

    package readerexcel;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Iterator;
    import jxl.Row;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    public class readexcel_7 {
    public static void main( String [] args ) {
    try {
    InputStream input = new FileInputStream("D://prova.xls");
    POIFSFileSystem fs = new POIFSFileSystem(input);
    HSSFWorkbook wb = new HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt(0);
    Iterator<Row> rows = sheet.rowIterator();
    while(rows.hasNext()) {
    HSSFRow riga = sheet.getRow(0);
    System.out.println("N. Riga = " + ((HSSFRow) rows).getRowNum());
    Iterator cells = ((HSSFRow) rows).cellIterator();
    while(cells.hasNext()) {
    HSSFCell cell = riga.getCell(0);
    System.out.println( "N. Cella = "
    + cell.getCellNum() );
    switch (cell.getCellType()) {
    case HSSFCell.CELL_TYPE_NUMERIC:
    System.out.println(cell.getNumericCellValue());
    break;
    }
    switch (cell.getCellType()) {
    case HSSFCell.CELL_TYPE_STRING:
    System.out.println(cell.getStringCellValue());
    break;
    default:
    System.out.println(
    "unsuported cell type" );
    break;
    }
    }
    }
    } catch ( IOException ex ) {
    ex.printStackTrace();
    }
    }
    }
    ma lancia ancora la seguente eccezione alla riga "Iterator<Row> rows = sheet.rowIterator();":

    Exception in thread "main" java.lang.NullPointerException
    at readerexcel.readexcel_7.main(readexcel_7.java:23)


    Inoltre alla riga "Iterator cells = ((HSSFRow) rows).cellIterator();" mi da questo suggerimento:

    Iterator is a raw type. References to generic type Iterator<E> should be parameterized

    Puoi aiutarmi?
    Grazie

  6. #6
    Ciao,
    Primo:
    formatta bene il tuo codice che non si capisce niente in questa maniera.

    Secondo:
    Ti ho già detto la soluzione...il codice è uguale non è cambiato di una virgola, almeno in quella riga lì.
    Te la posto nuovamente giù.

    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    Mi sembra strano che usi due librerie distinte.
    codice:
    import jxl.Cell;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    usi la JXL e le librerie di Apache POI (HSSF) per un solo fine.
    Tutto dovrebbe appartenere alla stessa libreria e non fare un fritto misto
    Infatti poi:
    codice:
     Iterator<Row> rowIterator = sheet.iterator();
     Iterator<jxl.Cell> cellIterator = Row.cellIterator();
    Usi due iterator di due librerie diverse.
    Ovviamente una delle due è in nullPointerException (la seconda).


    Ciao


    Per il secondo errore è un warning.
    Iterator is a raw type. References to generic type Iterator<E> should be parameterized

    Tutte queste cose in un libro sono scritte.
    Se vai di pari passo capisci le cose, ma iniziare un libro di java e cominciare a creare un documento excel mi sembra un esagerazione non avendo assolutamente le basi di quello che si sta scrivendo.
    Ultima modifica di schumy2000; 03-10-2014 a 10:19
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  7. #7
    Inoltre ti informo che jxl.Row non esiste
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.