Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    (SheetImpl.java:356)

    Ciao A tutti,
    sto provando a leggere un file excel con le varie informazioni che ho trovato su questo forum. Purtroppo non riesco a leggere nulla.
    Mi spiego meglio:
    Ho semplicemente copiato ed incollato due programmi presenti su questo forum, ma ottengo sempre lo stesso errore:
    codice:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
    	at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:356)
    	at ReadToText.main(ReadToText.java:26)
    Penso che l'errore sia dovuto al jxl.jar che ho importato.
    Avete lumi, suggerimenti??
    Vi ringrazio...

    P.s. vi copio il programma che mi da errori giusto per facilitare la visione del post.

    codice:
    import jxl.*;
    import java.io.*;
    
    public class ReadToText {
      public static void main (String[] args) throws Exception {
        String buff = "";
        //apro il file
        Workbook workbook = Workbook.getWorkbook(new File("C:/Documents and Settings/Andrea/Desktop/demofile.xls"));
        //prendo il primo foglio
        Sheet sheet = workbook.getSheet(0);
        boolean flag1 = true;
        boolean flag2 = true;
        int riga = 0;
        Cell currentCell;
        while (flag1) { //leggo per righe
          int cella = 0;
          while (flag2) {  //leggo le celle
            currentCell = sheet.getCell(cella, riga);
            flag2 = currentCell.getContents()== "" ? false : true;
            buff += currentCell.getContents();
            cella++;
          }
          buff += "\n";
          cella = 0;
          riga++;
          flag2 = true;
          currentCell = sheet.getCell(cella, riga);
          flag1 = currentCell.getContents() == "" ? false : true;
        }
        
        BufferedWriter br = new BufferedWriter(new FileWriter("C:/Documents and Settings/Andrea/Desktop/EXCEL.TXT"));
        br.write(buff);
        br.flush();
        br.close();
      }
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Ciao e benvenuto nel forum.
    Ti invito a prendere visione del Regolamento interno, in particolar modo alle sezioni dedicate ai titoli delle discussioni, ai contenuti e alle modalità di posting del codice.

    Sistemo io questa discussione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ho lo stesso problema! Nessuno ha risolto?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non sono entrato nel merito dell'eccezione, ma mi sa che devi rivedere alcune cose.
    Le stringhe sono oggetti e gli oggetti NON si confrontano usando l'operatore ==, ma usando il metodo equals() fornito per tutti gli oggetti.

    Quindi, nel tuo codice, ci sono almeno due errori da correggere, che potrebbero portare effettivamente a tale errore (visto che gestiscono flags che dovrebbero fermare il ciclo):

    codice:
    flag2 = currentCell.getContents()== "" ? false : true;
    deve diventare

    codice:
    flag2 = currentCell.getContents().equals("") ? false : true;
    
    // O meglio
    flag2 = !"".equals( currentCell.getContents() );
    E lo stesso più avanti:

    codice:
    flag1 = currentCell.getContents() == "" ? false : true;
    
    // Deve diventare così:
    flag1 = !"".equals( currentCell.getContents() );
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Ti ringrazio di avermi risposto!
    Avevo notato l'errore (segnalatomi a dire il vero da net beans) e ho apportato la modifica tua suggerita (complimenti per l'eleganza del codice :-)) solo che adesso mi segnala l'eccezione

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:356 )
    at readtotext.ReadToText.main(ReadToText.java:28)
    Java Result: 1


    ossia la riga incriminata è :

    currentCell = sheet.getCell(cella,riga);

    come se avesse problemi nell'assegnazione del valore della cella doooh

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E' da un po' che non uso JXL, ma per quanto riguarda il test potrebbe non essere sufficiente verificare che il contenuto sia una stringa vuota... potrebbe anche essere nullo.

    Quindi:

    codice:
    flag2 = (currentCell.getContents() != null) && !"".equals( currentCell.getContents() );
    e, di conseguenza, anche l'altro flag.

    Se non dovesse funzionare, posta nuovamente il codice con tutte le correzioni già apportate.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.