Pagina 1 di 1
[Risolto][Java] Problema con lettura da file excel e uso libreria POI
Inviato: venerdì 10 settembre 2010, 23:16
da cuccagna
Sto cercando di leggere da file excel tramite le API POI.
Ho scaricato il sorgente, poi decompresso l'ho piazzato sul desktop.
Sto sotto Windows 7.
Compilo da terminale con:
javac -cp .;C:\Programmi\Java\jdk1.6.0_20;C:\Users\Nick\Desktop\poi-3.6\src\java Apri.java
E spunta sulla shell:
Note: Apri.java uses or overrides a deprecated API
Note: Recompile with -Xlint: deprecation for details
Eseguo con
java -cp .;C:\Programmi\Java\jdk1.6.0_20;C:\Users\Nick\Desktop\poi-3.6\src\java Apri
Ma non da alcun risultato
Probabilmente sbaglio qualcosa nell'impostazione del classpath. Ma è un pò che sbatto e non me ne avvedo. Qualcuno può aiutarmi?
Questo codice dovrebbe leggere dal file già esistente Prova.xls e stampare C5.
Codice: Seleziona tutto
import java.io.*;
import org.apache.poi.poifs.filesystem.*;
import org.apache.poi.hssf.usermodel.*;
public class Apri
{
public static void main(String args[])
{
try
{
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("Prova.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt((short)1);
int row_index = 3;
HSSFRow row = sheet.getRow(row_index);
HSSFCell cell_esempio = row.getCell((short)5); //indice della colonna
double valore = cell_esempio.getNumericCellValue();
System.out.println(valore);
}
catch(IOException e)
{
System.exit(1);
}
}
}
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: sabato 11 settembre 2010, 2:20
da Zoff
L'errore deriva dal warning che ti viene visualizzato durante la compilazione, getCell(short) è deprecato, ed è anche il motivo per cui il codice si pianta.
Terminare il programma in caso di eccezione senza stampare nulla è un ottimo modo per complciarsi la vita in caso di problemi.
Prima di usare delle librerie sarebbe bene avere almeno un idea di come si usa un linguaggio...
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: sabato 11 settembre 2010, 15:58
da cuccagna
Zoff ha scritto:
'errore deriva dal warning che ti viene visualizzato durante la compilazione, getCell(short) è deprecato, ed è anche il motivo per cui il codice si pianta.
Terminare il programma in caso di eccezione senza stampare nulla è un ottimo modo per complciarsi la vita in caso di problemi.
Prima di usare delle librerie sarebbe bene avere almeno un idea di come si usa un linguaggio...
Non avevo mai incontrato un simile warning. Cercando sul web ho visto che deprecato vuol dire il metodo in questione è obsoleto. Guardando tra i commenti del metodo getCell(short) ho visto che è deprecato dall'Agosto 2008. Infatti passando un intero il warning sparisce.
Per quanto riguarda la gestione delle eccezioni trovo già fastidioso il fatto che alcune classi di eccezioni devono essere gestite o rilanciate pena errore di compilazione, per questo spesso lascio vuoto il blocco catch. Cmq mi ero accorto che System.exit(1) veniva eseguito dato che l'esecuzione non terminava normalmente dato che 3 non veniva stampato.
Cmq voglio farti contento
Codice: Seleziona tutto
import java.io.*;
import org.apache.poi.poifs.filesystem.*;
import org.apache.poi.hssf.usermodel.*;
public class Apri
{
public static void main(String args[])
{
try
{
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("Prova.xlsx"));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt((short)1);
int row_index = 3;
HSSFRow row = sheet.getRow(row_index);
HSSFCell cell_esempio = row.getCell(5); //indice della colonna
double valore = cell_esempio.getNumericCellValue();
System.out.println(valore);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
Il problema stava nel fatto che l'estensione del file non è .xls ma .xlsx, per questo non trovava il file e veniva lanciata l'eccezione.
Ora il problema sta nel fatto che viene lanciata l'eccezione OfficeXmlFileException perchè la classe da me usata non sa gestire il tipo di file che ho usato. Quindi devo uasre le classi di XSSF. Che pa.lle.
Se qualcuno le sa usare mi sparagna di andare a spulciare le classi.
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: sabato 11 settembre 2010, 17:08
da Zoff
cuccagna ha scritto:
Per quanto riguarda la gestione delle eccezioni trovo già fastidioso il fatto che alcune classi di eccezioni devono essere gestite o rilanciate pena errore di compilazione, per questo spesso lascio vuoto il blocco catch. Cmq mi ero accorto che System.exit(1) veniva eseguito dato che l'esecuzione non terminava normalmente dato che 3 non veniva stampato.
Molto male. Le eccezioni sono un concetto fondamentale della programmazione ad oggetti.
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: sabato 11 settembre 2010, 18:50
da deepswing
cuccagna ha scritto:
Se qualcuno le sa usare mi sparagna di andare a spulciare le classi.
OT
sei di foggia?? (good) (good)
/OT
per la classe, vedo un po' e poi ti scrivo qualcosa.
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: martedì 21 settembre 2010, 19:16
da cuccagna
Mi interessa leggere da file xlsx (e tramite la libreria POI si può fare sicuro) perchè devo implementare il codice per il seguente problema:
Ho due file .xlsx
Entembi contengono nel primo foglio nella colonna A dei numeri di telefono.
Devo restituire su file(non necessariamente file excel) tutti i numeri di telefono presenti sia nel primo che nel secondo file (che matchanno cioè) in modo che se nel primo elenco di numeri vi sono più numeri uguali che hanno anche solo 1 corrispondenza nel secondo elenco di numeri verranno riportati tutti nella colonna risultato. Non è vero il viceversa.
Ho pensato di fare una macro che viene azionata da un bottone.
E ci sono riuscito imparando un pò di visual basic (credo) dagli esempi della guida di excel stesso.
Tuttavia il problema è che così costringo il fruitore(il client per intenderci) a copiare manualmente l'elenco dei numeri di telefono nel file excel che ho creato nella colonna A ed in quella C.
Invece dovrei leggere automaticamente i file. Io vi chiedo
1) Sapete come fare la lettura di un file(chiuso e nella stessa directory) .xlsx in visual basic?
2) effettuare tutto in java, cosa che preferisco dato che conosco bene il linguaggio, quindi come usare la libreria POI per aprire e leggere un file .xlsx?
Questo è il codice in Visual Basic
Codice: Seleziona tutto
Private Sub CommandButton2_Click()
riga = 2
rigaRisultato = 2
Do Until Range("A" & riga & "").Value = ""
valore = Range("A" & riga & "").Value
rigaDue = 2
Do Until Range("C" & rigaDue & "").Value = ""
If Range("C" & rigaDue & "").Value = valore Then
Range("E" & rigaRisultato & "").Value = valore
rigaRisultato = rigaRisultato + 1
Exit Do
End If
rigaDue = rigaDue + 1
Loop
riga = riga + 1
Loop
End Sub
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: martedì 21 settembre 2010, 19:19
da cuccagna
deepswing ha scritto:
cuccagna ha scritto:
Se qualcuno le sa usare mi sparagna di andare a spulciare le classi.
OT
sei di foggia?? (good) (good)
/OT
NO
per la classe, vedo un po' e poi ti scrivo qualcosa.
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: mercoledì 22 settembre 2010, 15:21
da cuccagna
cuccagna ha scritto:
Mi interessa leggere da file xlsx (e tramite la libreria POI si può fare sicuro) perchè devo implementare il codice per il seguente problema:
Ho due file .xlsx
Entembi contengono nel primo foglio nella colonna A dei numeri di telefono.
Devo restituire su file(non necessariamente file excel) tutti i numeri di telefono presenti sia nel primo che nel secondo file (che matchanno cioè) in modo che se nel primo elenco di numeri vi sono più numeri uguali che hanno anche solo 1 corrispondenza nel secondo elenco di numeri verranno riportati tutti nella colonna risultato. Non è vero il viceversa.
Ho pensato di fare una macro che viene azionata da un bottone.
E ci sono riuscito imparando un pò di visual basic (credo) dagli esempi della guida di excel stesso.
Tuttavia il problema è che così costringo il fruitore(il client per intenderci) a copiare manualmente l'elenco dei numeri di telefono nel file excel che ho creato nella colonna A ed in quella C.
Invece dovrei leggere automaticamente i file. Io vi chiedo
1) Sapete come fare la lettura di un file(chiuso e nella stessa directory) .xlsx in visual basic?
2) effettuare tutto in java, cosa che preferisco dato che conosco bene il linguaggio, quindi come usare la libreria POI per aprire e leggere un file .xlsx?
Questo è il codice in Visual Basic
Codice: Seleziona tutto
Private Sub CommandButton2_Click()
riga = 2
rigaRisultato = 2
Do Until Range("A" & riga & "").Value = ""
valore = Range("A" & riga & "").Value
rigaDue = 2
Do Until Range("C" & rigaDue & "").Value = ""
If Range("C" & rigaDue & "").Value = valore Then
Range("E" & rigaRisultato & "").Value = valore
rigaRisultato = rigaRisultato + 1
Exit Do
End If
rigaDue = rigaDue + 1
Loop
riga = riga + 1
Loop
End Sub
Ncopp
Nessuno?Non siate timidi
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: mercoledì 22 settembre 2010, 16:07
da Mikycol
Eccoti un esempio per la lettura di un file EXCEL (l'ho usata per file xls, ma se non vado errato funziona pure per xlsx):
Codice: Seleziona tutto
try {
// Apre il file Excel
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("c:\\fileExcel.xls"));
// Si posiziona sullo sheet numero 0 (il primo)
HSSFSheet sheet = wb.getSheetAt(0);
// Itero tutte le row "esistenti" sullo sheet selezionato
for (int r = 0; r < sheet.getPhysicalNumberOfRows(); r++)
{
// Seleziono la row di interesse
HSSFRow row = sheet.getRow(r);
// Itero tutte le cell "esistenti" sulla row selezionata
for (int c = 0; c < row.getPhysicalNumberOfCells(); c++)
{
// Seleziono la cella di interesse (Non ricordo ma mi sembra pure queste partono dall'inidice 0)
HSSFCell cell = row.getCell(c);
System.out.print("Riga/Cella - " + r + "/" + c + ": ");
// Seleziono il tipo di get corretto in base al contenuto della cell
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_ERROR:
System.out.println(cell.getErrorCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
System.out.println("Cella BLANK");
break;
default:
System.out.println("DEFAULT");
break;
}
}
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
Se serve chiedi pure!
Ps. io sono di Vieste :P
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: mercoledì 22 settembre 2010, 19:17
da cuccagna
Mikycol ha scritto:
Eccoti un esempio per la lettura di un file EXCEL (l'ho usata per file xls, ma se non vado errato funziona pure per xlsx):
Codice: Seleziona tutto
try {
// Apre il file Excel
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("c:\\fileExcel.xls"));
// Si posiziona sullo sheet numero 0 (il primo)
HSSFSheet sheet = wb.getSheetAt(0);
// Itero tutte le row "esistenti" sullo sheet selezionato
for (int r = 0; r < sheet.getPhysicalNumberOfRows(); r++)
{
// Seleziono la row di interesse
HSSFRow row = sheet.getRow(r);
// Itero tutte le cell "esistenti" sulla row selezionata
for (int c = 0; c < row.getPhysicalNumberOfCells(); c++)
{
// Seleziono la cella di interesse (Non ricordo ma mi sembra pure queste partono dall'inidice 0)
HSSFCell cell = row.getCell(c);
System.out.print("Riga/Cella - " + r + "/" + c + ": ");
// Seleziono il tipo di get corretto in base al contenuto della cell
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_ERROR:
System.out.println(cell.getErrorCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
System.out.println("Cella BLANK");
break;
default:
System.out.println("DEFAULT");
break;
}
}
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
Se serve chiedi pure!
Ps. io sono di Vieste :P
Ti ringrazio per la risposta ma il codice da te postato come ho scritto prima non è in grado di aprire file .xlsx
Ora il problema sta nel fatto che viene lanciata l'eccezione OfficeXmlFileException perchè le classi da te usate( e anche da me in precedenza) non sanno gestire il tipo di file che ho usato. Quindi devo uasre le classi di altri package della libreria credo XSSF. Che pa.lle.
Qualcuno sa come funziona la lettura di file .xlsx con POI 3.6?
Grazie
Ps:
Ma siete tutti di Foggia e provincia wuagliò

Io sono cresciuto a Castellammare di Stabia(Na).
Termini come sparagna, ncopp e wuagliò ce li avete copiati
Sto a pazzià, nun va pigliat
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: giovedì 23 settembre 2010, 0:05
da Mikycol
Aspetta te lo scrivo per funzionare con xlsx, edito appena fatto!!!
Ti servono i seguenti jar per far funzionare il tutto:
- dom4j-1.6.1.jar
- poi-3.6-20091214.jar
- poi-ooxml-3.6-20091214.jar
- poi-ooxml-schemas-3.6-20091214.jar
- xbean.jar
Codice: Seleziona tutto
try {
// Apre il file Excel
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("c:\\prova.xlsx"));
// Si posiziona sullo sheet numero 0 (il primo)
XSSFSheet sheet = wb.getSheetAt(0);
// Itero tutte le row "esistenti" sullo sheet selezionato
for (int r = 0; r < sheet.getPhysicalNumberOfRows(); r++)
{
// Seleziono la row di interesse
XSSFRow row = sheet.getRow(r);
if (row != null)
{
// Itero tutte le cell "esistenti" sulla row selezionata
for (int c = 0; c < row.getPhysicalNumberOfCells(); c++)
{
// Seleziono la cella di interesse (Non ricordo ma mi sembra pure queste partono dall'inidice 0)
XSSFCell cell = row.getCell(c);
System.out.print("Riga/Cella - " + r + "/" + c + ": ");
if (cell != null)
{
// Seleziono il tipo di get corretto in base al contenuto della cell
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case XSSFCell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case XSSFCell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
case XSSFCell.CELL_TYPE_ERROR:
System.out.println(cell.getErrorCellValue());
break;
case XSSFCell.CELL_TYPE_BLANK:
System.out.println("Cella BLANK");
break;
default:
System.out.println("DEFAULT");
break;
}
}
else
{
System.out.println("CELLA VUOTA");
}
}
}
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
Re: [Java] Problema con lettura da file excel e uso libreria POI
Inviato: mercoledì 13 ottobre 2010, 8:27
da cuccagna
Mi sono accorto solo adesso che mi avevi risposto e pure tanto tempo fa, non ho guardato perche' avevo perso le speranze.
Grazie, funziona e ho risolto.
Solo che ho perso un po' di tempo per trovare le classi di XSSF e mettere l'import.
import org.apache.poi.xssf.usermodel.*;
import java.io.*;
Infine bisogna aggiungere un paio di uguali, li ho messi in rosso nel codice altrimenti salta gli ultimi valori in alcuni casi
e ad essere pignoli un else per chiudere il primo if per indicare la riga vuota

Grazie e a buon rendere (b2b)
Mikycol ha scritto:
Aspetta te lo scrivo per funzionare con xlsx, edito appena fatto!!!
Ti servono i seguenti jar per far funzionare il tutto:
- dom4j-1.6.1.jar
- poi-3.6-20091214.jar
- poi-ooxml-3.6-20091214.jar
- poi-ooxml-schemas-3.6-20091214.jar
- xbean.jar
try {
// Apre il file Excel
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("c:\\prova.xlsx"));
// Si posiziona sullo sheet numero 0 (il primo)
XSSFSheet sheet = wb.getSheetAt(0);
// Itero tutte le row "esistenti" sullo sheet selezionato
for (int r = 0; r <
=sheet.getPhysicalNumberOfRows(); r++)
{
// Seleziono la row di interesse
XSSFRow row = sheet.getRow(r);
if (row != null)
{
// Itero tutte le cell "esistenti" sulla row selezionata
for (int c = 0; c <
= row.getPhysicalNumberOfCells(); c++)
{
// Seleziono la cella di interesse (Non ricordo ma mi sembra pure queste partono dall'inidice 0)
XSSFCell cell = row.getCell(c);
System.out.print("Riga/Cella - " + r + "/" + c + ": ");
if (cell != null)
{
// Seleziono il tipo di get corretto in base al contenuto della cell
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case XSSFCell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case XSSFCell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
case XSSFCell.CELL_TYPE_ERROR:
System.out.println(cell.getErrorCellValue());
break;
case XSSFCell.CELL_TYPE_BLANK:
System.out.println("Cella BLANK");
break;
default:
System.out.println("DEFAULT");
break;
}
}
else
{
System.out.println("CELLA VUOTA");
}
}
}
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
Re: [Risolto][Java] Problema con lettura da file excel e uso
Inviato: giovedì 16 marzo 2017, 17:42
da JavaForEver
Qua un semplice esempio di lettura file tramite la libreria POI:
<link rimosso dallo staff per spam>

Re: [Risolto][Java] Problema con lettura da file excel e uso
Inviato: giovedì 4 maggio 2017, 14:07
da tokijin
@JavaForEver
Controlliamo le date, non è bene riportare in vita una discussione ferma dal 2010.
Chiudo.