Home / Programmazione / Java / Leggere fogli Excel in Java
Mattepuffo

Leggere fogli Excel in Java

Leggere fogli Excel in Java

In questo articolo avevo spiegato come creare fogli Excel prendendo i dati da una JTable.

Oggi vi spiego come fare il contrario, cioè prendere dati da un foglio e mettere sulla nostra applicazione.

Uso sempre le stesse librerie: Java Excel API.

Quindi scaricate la libreria e aggiungetela al vostro progetto.

Se volete qui trovate un buon tutorial.

Comunque lo scenario è questo: nel foglio ho una sola colonna con dentro non so quante righe; il contenuto di queste righe le devo passare al JFrame in modo che riempiano una JComboBox.

Prima di tutto creiamo una classe che si occuperà di leggere il foglio Excel:

 

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class ExcelReader {

public ArrayList<String> readEmail() throws IOException, BiffException {
Workbook wb = Workbook.getWorkbook(new File("email.xls"));
Sheet sh = wb.getSheet(0);
Cell[] cl = sh.getColumn(0);
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < cl.length; i++) {
list.add(cl[i].getContents());
}
wb.close();
return list;
}
}

Il metodo ritorna un ArrayList<String> in modo che possiamo agevolmente riempire la JComboBox.

Con l'oggetto Workbook apriamo il file xls.

Con Sheet identifichiamo il foglio che vogliamo usare, considerando che il conteggio parte da zero.

Poi abbiamo un array di Cell; usando il metodo getColumn(int colonna) otteniamo un array con tutte le righe della colonna desiderata.

Considerate che anche le righe e le colonne partono da zero.

Quindi la cella A1 avrà coordinate (0,0).

Istanziamo un ArrayList<String> che riempiremo nel ciclo for.

Nel ciclo non facciamo altro che aggiungere il valore di ogni cella usando il metodo getContents(), che ritorna il contenuto generico della cella.

Considerate che ci possono essere variazioni a seconda che il contenuto delle celle siano numerici o stringhe; guardate il tutorial per vedere come fare nelle varie condizioni.

Qui so per certo che sono stringhe.

Inoltre so che la colonna è sempre una; sennò avremo usato getCell(int row, int col),

Alla fine chiudiamo il Workbook.

Nel JFrame dobbiamo richiamare questa classe per riempire la combo:

public void riempiCombo(JComboBox box) throws IOException, BiffException {
ExcelReader er = new ExcelReader();

box.addItem("*");
ArrayList<String> list = er.readEmail();
for (Object obj : list) {
box.addItem(obj);
}
}

Ho fatto un metodo che accetta come parametro una JComboBox in modo che posso venire riusato per più combo.

Poi ho messo un evento in apertura di finestra:

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
File file = new File("/home/matte/Desktop/email.xls");
if (file.exists()) {
try {
riempiCombo(comboTo);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
} catch (BiffException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
} else {
JOptionPane.showMessageDialog(null, "Il file non esiste");
}
}

Guardatevi la Javadoc per avere una visione più specifica dei varie metodi e classi usate.

Comunque non è difficile.