Apr 30
Generare file excel in Java con Poi
Scopo di questi appunti è creare una servlet che esporti dei dati in excel. Per fare questo userò la libreria POI di Apache.
POI è un insieme di libreire per creare/accedere a diversi tipi di documenti Microsoft (basandosi su Microsoft OLE).
Questa libreria vi permette di creare dei completi documenti Excel suddivisi in fogli, con formule o altri valori ammissibili in Excel. Di seguito riporto una servlet che compone on-line un foglio Excel. Come si può vedere dal codice (che ho volutamente riempito di commenti) POI è di semplicissimo uso.
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class StampaXls extends HttpServlet implements Servlet {
public StampaXls() {
super();
}
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
generate(arg0, arg1);
}
private void generate(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//Metto a opsto il corretto MIME per excel
res.setContentType(”application/msexcel”);
//Prendo l’outputStream dal response
OutputStream out = res.getOutputStream();
//Creo un Workbook e poi un foglio di lavoro
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
// Ora creo una riga notare che sia le righe che le colonne si indirizzano con un numero
HSSFRow row = sheet.createRow((short)0);
//Butto diversi tipi di valori all’interno delle celle
row.createCell((short)1).setCellValue(1.5);
row.createCell((short)2).setCellValue(”Una strings”);
row.createCell((short)3).setCellValue(true);
out.flush();
//Scrivo quanto fatto sull'output
wb.write(out);
}
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
generate(arg0, arg1);
}
}

Luglio 4th, 2007 at 13:00
Ciao Giampiero, ti faccio i miei complimenti sulle informazioni e i sorgenti da te realizzati, una cortesia, è possibile avere altri esempi su come realizzare web service con netbeans?
Grazie,
Pietro
Febbraio 3rd, 2008 at 09:14
Ciao ho provatpo la tua servlet… premetto che mi sono affacciato da pochissimo nel mondo java e nella programmazione in generale.
Cmq dicevo, ho provato la servlet e quando la eseguo mi crea un file sconosciuto e mi chiede se voglio salvarlo e cercare un programma in rete che possa aprirlo.
L’ho salvato e ho cercato di aprirlo con ExCel ma non lo apre… mi dice: “impossibile leggere il file!”.
Cosa significa? dove sbaglio?
Ancora una cosa, io vorrei chiederti la cortesia di spiegarmi brevemente come si legge un EXCEL ho trovato qualcosa in rete ma devo dire che i tuoi commenti sono i più chiari.
Grazie anticipatamente…
Se rispondi al messaggio mi avvisi per mail per cortesia? magari mi posti il linck dove hai scritto il codice.
Scusa ancora per il disturbo.
Antonio
Febbraio 7th, 2008 at 08:09
Per Pietro, appena posso faccio altri esempi.
Per Antonio, ho poche informazioni per aiutarti. Ma quasi sicuramente ci sono degli errori nel riempire il contenuto dell’excel, se hai errori nel programma, ti sputa fuori un excel non corretto.
Ciao a tutti
Giugno 23rd, 2008 at 13:25
Ciao Giampiero,
intanto ti faccio i complimenti per il Blog, molto utile e interessante, poi ti volevo chiedere una cosa. Ho la necessità di crearmi un file XLS con i dati di una query SQL, tutto questo lo vorrei fare con JAVA o con una Servlet che viene richiamata da un link. La cosa che non riesco a fare è che io voglio che il file lo salvi in una posizione predefinita del Disco (Server) e che non mi faccia fare il download del file. Mi puoi dare delle informazioni a riguardo se non ti chiedo troppo. Grazie Mille, Saluti
Giugno 23rd, 2008 at 19:49
Ciao, grazie per i complimenti. Fare quello che chiedi è abbastanza semplice usa invece dell’OutputStream la classe figlia FileOutputStream
ad esempio
FileOutputStream fos = new FileOutputStream(new File(”c:\\file.xls”));
e scrivi l’output su questo.
Spero di esserti stato utile.
Ciao
Giampiero
Giugno 25th, 2008 at 11:47
Grazie Mille,
ho risolto con il tuo Aiuto..
Giugno 26th, 2008 at 08:12
volevo chiederti un’altra info se non chiedo troppo, posso chiudere automaticamente il browser dopo avere salvato il file sul Disco Rigido senza nessuna interazione dell’utente.
Cioè io voglio che dopo avermi creato il File sul Disco mi chiuda la finestra attiva o il browser.
Grazie Mille
Giugno 26th, 2008 at 08:54
Lo puoi fare se hai aperto una pop up (che nell’esempio ho chiamato popWindow). A questo punto con javascript puoi mettere un link come questo per chiudere.
<A HREF=”javascript:void(0)” onClick=”MyWindow.close();”>Chiudete la finestra </>
Non puoi chiudere la finestra principale
Giugno 26th, 2008 at 09:03
Grazie.
Luglio 1st, 2008 at 19:56
Ciao, ti disturbo ancora…
Avrei la necessita di leggere da un file di testo una riga che contiene ad esempio:
“Questa”,”e”,”una”,”prova” (vorrei che lo leggesse cosi come lo scritto)
Dopo avere letto il file vorrei salvare il contenuto in un ARRAY di tipo STRING.
Mi sapresti aiutare??
Quello che ho fatto è la seguente:
FileReader f = new FileReader(”c:\\prova.txt”);
BufferedReader br = new BufferedReader(f);
String line = br.readLine();
f.close
Cosi mi legge la riga ma la mette in una strina e non in un array.
Mi sai dire come posso salvare la riga su un array di tipo string??
grazie Mille per l’aiuto
Luglio 2nd, 2008 at 08:57
Usa StringTokenizer fa quello che ti serve…
Ciao
Luglio 18th, 2008 at 08:43
Ciao Gianpiero, ho visto che sei molto ferrato sull’utilizzo del poi per excel. Volevo chiederti se gentilmente puoi risolvermi questo proble. Devo leggere i dati contenuti su un file excel. però non di una riga-cella precisa, ma tutto il contenuto del foglio. Meglio se recupero anche la colonna (A,B,C …) Ciao e grazie. Michele
Luglio 18th, 2008 at 08:45
Scusa Giampietro, dimenticavo che sviluppo in java tramite NetBeans. Ciao Michele
Luglio 18th, 2008 at 13:58
Leggili riga per riga iterando come fosse un resultset di un db.
ecco un esempio di codice.
Ciao
try {
//Apro uno stream per leggere i dati
InputStream input = new FileInputStream(filename);
POIFSFileSystem fs = new POIFSFileSystem(input);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
Iterator rows = sheet.rowIterator();
int intestazione = 0;
//Itero sulle righe del foglio
while (rows.hasNext()) {
//Fai qui quello che devi fare
}
}
Agosto 21st, 2008 at 08:02
Ciao, io sto cercando di leggere un xml e esportarlo in excel. La cosa funziona con un xml “noto”, ma come posso scrivere in codice che si deve leggere tutto l’xml senza specificare tutti i campi??
Grazie mille
Agosto 25th, 2008 at 11:38
Non ho capito bene cosa intendi fare. Mi sembra di avere intuito che hai un xml di cui non conosci la struttura e che devi riportare in un file excel.
Se non sai come è fatto l’xml prova a parserizzarlo come fosse uno Stream, usando quindi StAX (trovi un esempio su questo sito).
Spero di essere stato utile.
Ciao
Settembre 3rd, 2008 at 08:58
Ciao,complimenti per l’esempio decisamente chiaro!
Anche io sto usando POI ma ho un problema penso di livello “basso”.
Io esporto un file excel di circa 6M (qualche centinaio di righe per ogni foglio e 50 fogli). Quando lo apro con
excel 2002 mi compaiono degli alert riguardo “troppi formati di cella usati”(ne uso solo 3!), dopodichè mi scombina
tutta la formattazione (grasseto dove deve essere normale , etc). Tu sai di eventuali limiti
alla quantià di dati da esportare o effetti laterali?
Grazie e complimenti ancora!
Settembre 3rd, 2008 at 09:57
Grazie per i complimenti, purtroppo non ti so rispondere. I miei export sono sempre stati più piccoli come brevi report.
Se scopri il problema o i limiti fammeli sapere che mi interessano.
Ciao
Settembre 17th, 2008 at 12:39
Ciao Giampiero! Navigando su google ho trovato il tuo sito e devo dire che è fatto veramente bene, oltre ad essere professionale e molto utile. Volevo chiederti una cortesia… Dovrei realizzare un programma (intendo utilizzare java) che legga dei dati da un file e li inserisca in maniera strutturata in un file excel. Sapresti dirmi che librerie mi servono e se è possibile farlo senza ricorrere ad Apache? Hai qualche suggerimento da darmi? Ti ringrazio in anticipo. Buona giornata!
Settembre 17th, 2008 at 13:00
Le librerie POI sono le migliori. Le includi nel progetto con semplicità. Non vedo motivo per non usarle (non farti ingannare dal nome di apache puoi usarle anche in applicazioni standalone).
Ma se proprio non puoi/vuoi potresti accedere ad un foglio excel tramite JDBC-ODBC ed accedere al foglio come fosse una base dati.
Esistono altre opzioni che non ho provato quali http://jexcelapi.sourceforge.net/
Altra possibilità… prova ad interagire con Open Document Format, il formato di Open Office.
Ciao
Giampiero
Settembre 24th, 2008 at 13:57
complimenti per gli esempi, e per il bellissimo blog, ho trovato un sacco di cose interessantissime qui..
ho utilizzato i tuoi suggerimenti su POI con profitto, e li ho inseriti immediatamente nella mia web app per generare fogli excel..
grazie molte..
Ottobre 14th, 2008 at 07:48
Ciao Gianpiero, complimenti per il blog.
Ho la necessità di creare un foglio excel estraendo i dati da un database (mysql).
Posso utilizzare la libreria POI?
Grazie
Sara
Ottobre 14th, 2008 at 07:51
Certo, basta che apri una connessione JDBC a mysql estrai i dati in un ResultSet, lo scorri e inserisci i dati in excel tramite POI.
Ciao
Giampiero
Ottobre 14th, 2008 at 09:56
Ciao Giampiero, gran bel sito, utile e chiaro. Grazie al tuo esempio non ho avuto problemi a generare un file excel. Mi si presenta però un problema quando apro il file con OpenOffice: tutte le righe che contengono celle scritte da me, risultano nascoste e sono obbligato ad interagire con Calc, selezionando le righe e premendo su “Mostra”. Ti è mai capitata una cosa simile? Se sì, come hai risolto?
Ciao e Grazie
Nicola
Ottobre 14th, 2008 at 10:10
Non ho mai provato. Prova a mettere la dimensione della cella fissata, magari basta quello.
Se usi OpenOffice puoi usare, invece di POI, le API di OO.
Ciao
Giampiero
Ottobre 21st, 2008 at 18:35
Ciao Giampiero,
Ti illustro subito il mio “grosso” problema, a lavoro: ogni giorno ricevo in ufficio, nella mia mailbox outlook, decine di mail, in cui, chiaramente, è visualizzabile il mittente, l’ora della mail e il giorno. All’interno di ciascuna mail vi è come allegato un file excel sempre con lo stesso layout, cioe con gli stessi campi, ma, chiaramente con dati differenti, da mail a mail.
Io vorrei creare un tool, una macro, una qualsiasi cosa che mi permetta di avere in output un file excel corredato dei seguenti campi:
mittente mail data mail ora mail tipo preparazione tipo spedizione oggetto mail
Tipo preparazione e tipo spedizione sono dei valori che estraggo dai vari file excel in allegato alle mail. Tipo preparazione puo assumere due valori: USU e USS. Nel file excel vi è una cella in cui è inserito il testo USS o USU (cieè la parola USS) e accanto alle due celle (posizionate una sopra l’altra) vi è una cella in cui è inserita una X per indicare il tipo di preparazione scelto.
USS X
USU
La stessa cosa avviene per il tipo spedizione che puo assumere due valori: SPS o SPU e anche li vi è una X a seconda della scelta effettuata.
Quindi, ricapitolando io dovrei estrarre da ciascuna mail il mittente, la data mail, l’ora mail, e l’oggetto e inserere i valori nel foglio excel di output. Poi dovrei poter aprire automaticamente, per ciascuna mail, il file excel in allegato, e estrarre, in base alla posizione della crocetta, il rispettivo tipo preparazione e tipo spedizione, cioe il testo USS piuttosto che USU, o SPS piuttosto che SPU. Ed avere cosi tutti questi valori in una sola riga che rappresenta una mail.
Questo vorrei poterlo fare senza aprire per ciascuna mail l’allegato excel, e quindi poterlo fare col minimo sforzo.
Il problema piu grosso sembrerebbe quello di trattare con due tipi di file diversi: un file excel (cioè l’allegato), e l’altro la mail di outlook, dal quale mi sembra molto complesso poter estrarre singolo dati (mittente, data mail…).
Spero di essere stato abbastanza chiaro, e confido in un tuo aiuto. Ci tengo a precisare che non sono molto pratico di java, purtroppo.
Anticipatamente ti ringrazio e spero davvero che tu possa e soprattutto voglia aiutarmi, perche sono davvero in grossa dificolta ed ho bisogno di un tool che mi permetta di velocizzare il lavoro, perche ad oggi faccio tutto a mano, cioè apro tutte le mail, e tutti gli allegati excel e copio, a mano, sul file riepilogativo, tutti i campi che vi ho illustrato. E’ un lavoro da pazzi!!!.
Ti ringrazio.
Ciao a tutti.
MARCO
Ottobre 23rd, 2008 at 10:47
Ciao quello che chiedi non è impossibile ed anzi si può fare facilmente. Quello che mi preoccupa è che non conosci Java, anche se potresti fare la stessa cosa con .Net (Visual Basic o altro) e forse ancora più facilmente.
Ti do qualche dritta per il mondo Java.
Allora separa i problemi:
1. devi leggere le mail che ti arrivano
2. devi prendere i dati di queste mail e metterli in excel
3. devi elaborare gli allegati
Con Java riesci a fare queste operazioni in maniera semplice con la libreria POI per scrivere su Excel e Java Mail per scrivere delle classi che leggano la tua posta e prelevino i dati che ti servono (come mittente, oggetto, allegato, ecc…).
Per POI puoi basarti sul mio articolo, mentre per Java Mail dai un occhio a questo tutorial che ho trovato in rete http://www.javaworld.com/javaworld/jw-10-2001/jw-1026-javamail.html.
Spero di esserti stato utile.
Ciao.
Giampiero
Novembre 11th, 2008 at 14:40
Ciao Giampiero. Scusa il disturbo! Sto realizzando un’applicazione in java che crea un foglio excel inserendo all’interno dei dati. Sto usando le librerie jxl. Sapresti dirmi come posso formattare la dimensione di una cella prima di inserirci un valore (ad esempio una stringa)?
Ti ringrazio in anticipo.
Ciao!
Marco
Novembre 12th, 2008 at 08:03
Pardon! Ho risolto. Grazie lo stesso. Ciao
Gennaio 15th, 2009 at 14:56
ciao!
Con un po’ di ritardo ho risolto il problema: il problema è proprio di Microsoft Excel che da di matto quando trova troppe formattazioni diverse.
Per aggirarlo ho usato come attributi non modificabili i vari HSSFFont, HSSFStyle etc della classe che si occupa di creare l’Excel: la formattazione non è bella ma almeno spariscono alert e la formattazione non da sorprese.
Maggio 5th, 2009 at 13:46
ciao giampiero,io ho da realizzare un report in excel con dei dati che mi recupero da una query.solo che questi dati,vanno su u foglio excel…ma formattato nel senso che questo foglio deve avere
come una maschera predefinita hai presente quando compili a mano una fattura???ecco ed io vorrei usare una servlet con un link che va su un action che recupera questa query e poi crea l’excel.Fino a qua lo so fare..mi manca come rendere il report in excel ben formattato…tipo maschera.Qualche idea??
Maggio 5th, 2009 at 18:06
Ciao Letizia. Qualche informazione sulla formattazione delle celle la puoi settare, ma se fosse particolarmente complesso perché non fare (a mano) un file xls che ti faccia da template, aprirlo programmaticamente e inserire i dati che ti servono?
Spero di esserti stato utile
Ciao
Giampiero
Giugno 7th, 2009 at 14:35
Certo è possibile, non è tanto un problema di data quanto di formato.
Usa il CellStyle (CellStyle style), imposta un dataformat (style.setDataFormat) e applicalo ad una cella (cell.setCellStyle(style)
Grazie per i complimenti
Ciao
Giugno 9th, 2009 at 07:39
Grazie per il consiglio funziona alla grande!!!!
Giugno 9th, 2009 at 09:54
Grazie hai tuoi consigli sono riuscito a creare un file xls.
Ora ti vorrei chiedere un altro favore se possibile ho appena scritto una codice che legge il file xls creato. Però mi si verifica l’errore
ERROR - Errore elaborando il file java.lang.NullPointerException
at ridjlib.XLSReader.getRowCell(XLSReader.java:91)
at ridjlib.XLSReader.parse(XLSReader.java:62)
at ridimportatorelivelli.Engine.elaboraXlsFile(Engine.java:350)
at ridimportatorelivelli.Engine.generateXMLFile
COME SE IL FILE FOSSE VUOTO.
Ti posto il frammento di codice
public List parse() throws Exception {
List dams = new ArrayList();
int riga = 1;
while (true)
{
Record dam = new Record();
dam.name = getRowCell(riga, 0);
dam.id = getRowCell(riga, 1);
if (dam.id == null) break; if (dam.id.length() == 0)
break;
dam.ts = getRowCell(riga, 2);
dam.value = getRowCell(riga, 3);
dams.add(dam);
++riga;
}
return dams;
}
private String getRowCell(int rowNum, int colonna)
throws Exception
{
HSSFRow row = sheet.getRow(rowNum);
HSSFCell cell = row.getCell(colonna);
String value = “”;
if (cell != null)
{
switch (colonna)
{
case 0:
value = cell.getStringCellValue();
break;
case 1:
value = cell.getStringCellValue();
break;
case 2:
value = getFormatDate(cell.getDateCellValue());
break;
case 3:
value = String.valueOf(cell.getNumericCellValue());
}
}
return value;
}
Giugno 17th, 2009 at 14:13
Il problema dell’altra volta lo ho risolto.
Vorrei ora chiederti una volta impostata la data nel formato desiderato ad esempio “m/d/yy h:mm” come posso togliere alla mia data due ore?Esiste in java un metodo che mi permette di fare cio.
Ciao e grazie per la disponibilità
Giugno 25th, 2009 at 10:38
Ciao Giampiero, ti informo che il link “POI di Apache” non funziona: c’è un http// di troppo.
Ciao e buon lavoro.
Giugno 25th, 2009 at 10:41
Messo a posto. Grazie
Giugno 30th, 2009 at 15:25
Ciao scusate una domanda è poco che uso i “POI di Apache” ed avrei un problema sulla formattazione delle celle, attualmente le celle sono messe in modo generico pero quando gli arriva un numero mi compare un triangolino verde in alto a sinistra “numero memorizzato come testo”, avete consigli da darmi per risolvere il problema???
grazie per l’aiuto
Alessandro
Luglio 1st, 2009 at 10:54
Ciao vorrei avere delle info se possibile, è poco tempo che uso le “POI di Apache” però mi sono imbattuto in un problema che al momento non sono in grado di risolvere, ti spiego meglio.
Riesco a generare il file xls come voglio, solo che su alcune celle devo inserire dei numeri, però excel mi ritorna questo errore “numero memorizzato come testo”.
Sai per caso darmi qualche consiglio su come risolvere questo problema??
grazie mille.
Ciao
Alessandro
Luglio 1st, 2009 at 12:05
Controlla di aver inserito il numero come row.createCell((short)1).setCellValue(1.5);
e non come stringa row.createCell((short)1).setCellValue(”1.5″);
Altro non ti saprei dire…
Scusa
Luglio 1st, 2009 at 12:23
ok grazie mille, risolto. molto gentile
Luglio 9th, 2009 at 14:15
Ciao Giampiero,
complimenti per il tuo aiuto innanzitutto…anzichè vedere un foglio Excel, mi viene creato un file sconosciuto che non riesco ad aprire con Excel, neppure dopo averlo salvato su file system.
Sapresti darmi qualche aiuto? Grazie, ciao!
Luglio 30th, 2009 at 08:07
Ciao Giampiero,
Io dovrei formattare una cella come valuta: € 1.234,67
vedo che sei espertissimo con creazione Excel
Con simbolo di euro compreso… Un qualcosa che vada bene con server linux e Windows, con Microsoft Excel o OpenOffice, con Internet Explorer O Firefox, con client windows o linux…Insomma sempre
Hai qualcosa in mente?
Grazie mille
Ciao
Mitico
Luglio 31st, 2009 at 12:45
Per Gian. Prova questo
Style style = wb.createCellStyle();
style.setDataFormat(format.getFormat(”\u0080 #.##0,0000″));
cell.setCellStyle(style); //applicalo alla cella desiderata
Luglio 31st, 2009 at 12:53
\u0080 è l’unicode per l’euro
Ottobre 20th, 2009 at 13:48
Lavorando con excel sono riuscito nella creazione di un programma tecnico, per il mio lavoro.
Come posso rendere più piccoli i fogli di lavoro. (un foglio misura 9 mega)
Premetto che sono un praticone, e per di più non conosco una parole di inglese.
Scusa il disturbo.
Saluti Lorenzo
Ottobre 30th, 2009 at 13:05
Giampiero,
come faccio a salvare il file con l’estensione .xls così può essere aperto senza che il sistema ti chieda ogni volta l’applicazione da utilizzare? Grazie
Novembre 18th, 2009 at 08:01
L’importante è settare correttamente il content-type. Questo dice al browser con cosa aprirlo.
Altrimenti genera file temporanei sul server e falli scaricaricare.
Ciao
Dicembre 2nd, 2009 at 09:26
Ciao, come si fa ad adattare la cella alla larghezza del testo contenuto in essa?
Dicembre 22nd, 2009 at 08:55
Ciao, ci sono per caso problemi di copyright quando si usano queste librerie per creare file in formato xls?
Gennaio 10th, 2010 at 15:20
Ciao! scusami se disturbo…il mio problema è questo:
ho un file con excel2007…voglio scrivere da java su delle celle…ma provando con il codice per un esempio ho tale errore
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
at Excel.(Excel.java:36)
at Main.main(Main.java:17)
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
… 2 more
il codice usato è il seguente:
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Excel {
public Excel() throws FileNotFoundException, IOException, InvalidFormatException{
InputStream inp = new FileInputStream(”C:/Users/Lorena/workspace/Excel/src/java.xlsx”);
//InputStream inp = new FileInputStream(”workbook.xlsx”);
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.getSheetAt(0);
int row_index = 2; //indice della linea
Row row = sheet.getRow(2);
Cell cell_esempio = row.getCell(2); //indice della colonna
Double valore = cell_esempio.getNumericCellValue();
System.out.println(valore);
}}
Gennaio 12th, 2010 at 08:15
Ciao Lorena, l’errore dice che non trova la libreria di xmlbeans. Controlla di averla nel tuo classpath altrimenti scaricala (http://xmlbeans.apache.org) e aggiungila.
Gennaio 18th, 2010 at 15:54
Ciao,
ti segnalo come ho risolto il problema: ho impostato un solo stile per tutte le parti dell’excel (titolo, dati, etc). Non è bello ma ho notato che creando un file excel di (grosso modo) 50 fogli, 30 righe ed 10 colonne è l’unica soluzione perhcè Microsoft Excel ha dei limiti per il numero di formattazioni.
Con un bel po’ di ritardo
ciao
Marzo 4th, 2010 at 15:28
Ciao,
come faccio ad aprire un file excel direttamante da web?
Mi spiego meglio:
ho una applicazione che genera un foglio excel e vorrei che questo si aprisse direttamente senza che compaia la maschera di
download del browser che chiede se aprirlo direttamante o salvarlo.
Grazie e ciao
Marzo 4th, 2010 at 15:42
Ciao Tania,
non credo tu possa farlo lato server. Sono impostazioni lato client sul particolare browser che l’utente utilizzerà.
Maggio 20th, 2010 at 14:25
Salve Giampiero
innanzitutto complimenti per il lavoro svolto. Sto usando anch’io le stesse classi Java per portare dei file da DB400 ad Excel. Ho solo il problema che le formule scritte in alcuni campi vengono portate sul foglio Excel come testo e non vengono invece interpretate come formule (es =A1+B1 rimane come testo). Potrebbe dirmi cortesemente se c’è un modo per fare interpretare come formule il contenuto di alcuni campi?
Grazie mille e buona giornata.
Angelo
Maggio 21st, 2010 at 08:31
Salve,
vorrei sapere come fare ad unire più celle insieme. Tipo il “rowspan” e il “colspan” dell’HTML.
GRAZIE in anticipo.
Giugno 12th, 2010 at 16:12
Ciao Giampiero,
complimenti per il lavoro svolto che mi è stato di aiuto nella lettura di dati da fogli Excel.
Ora però mi trovo dinanzi ad un problema che non so come risolvere: sto utilizzando XSSF per leggere un foglio Excel2007 ma quando tento l’apertura del foglio con le seguenti semplici righe
XSSFWorkbook wb = new XSSFWorkbook(fileXls);
foglio=wb.getSheetAt(0);
mi segnala il seguente errore:
java.io.IOException: org.apache.poi.openxml4j.exception.InvalidFormatException: Package should contain a content type part [M1.13]
java.lang.NullPointerException
Hai qualche idea da darmi? Io ho necessità di leggere uno specifico file Excel e mi sono arenato qui perchè mi pare di capire che il problema sia la struttura del file.
Grazie in anticipo per la tua disponibilità.
Giugno 15th, 2010 at 07:25
Non riconosce il content type quasi come se fosse in un formato non ammissibile. Dai un occhio ai sorgenti https://svn.apache.org/repos/asf/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java
Ciao
Giugno 15th, 2010 at 07:32
Per Vania, fai il merge delle celle. Guarda qui l’API http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFSheet.html#addMergedRegion(org.apache.poi.ss.util.CellRangeAddress)
Giugno 15th, 2010 at 07:34
Per angelo guarda il metodo setCellFormula http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#setCellFormula(java.lang.String)
Giugno 21st, 2010 at 15:24
Ciao Giampiero complimenti.
Volevo chiederti:ho un excel dove ogni record è tutto all’interno della prima cella di ciascuna riga e ogni campo del record è separato da un punto e virgola (ho ottenuto il file da un csv).. quali classi posso usare per distinguere il record in piu celle e quindi ottenere un excel formattato correttamente?
In pratica vorrei fare quello che manualmente si fa cliccando sul tab “dati” e poi “testo in colonne” …
Grazie ciao
Novembre 13th, 2010 at 10:12
Ciao Giampiero,
complimenti davvero per il tuo sito. Avrei bisogno, per favore, di un tuo aiuto.
Sto realizzando un’applicazione desktop in java che salva dei dati in un foglio excel e grazie ai tuoi suggerimenti e alle api apache sembra che tutto prosegue per il meglio. Mi servirebbe capire solo 2 cose:
-ho importato nel progetto le ultime librerie poi 3.7 ma non trovo al loro intrerno i richiami a:
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
per la gestione dei fogli excel 2007 ho soltanto import org.apache.poi.xssf.usermodel.HSSFWorkbook per i fogli “xls”
devo scaricare qualcos’altro?
-io vorrei realizzare un grafico con i dati inseriti dall’applicazzione sul foglio e successivamente visualizzare il grafico stesso all’interno della mia GUI o altro contenitore tipo jPannel etc..
e’ possibile??
Grazie mille.
Ciro
Novembre 13th, 2010 at 10:14
ops…mi è scappata una “z” in + su applicazione!

Novembre 13th, 2010 at 10:40
I fogli exel 2007 utilizzano open xml e su questo apache poi è indietro e cambia completamente la sua api. Non l’ho ancora guardata… devi guardare HSSF e non XSSF
Per il grafico ti consiglio di usare jfreechart basato sui tuoi dati in excel. Crearli con POi non mi sembra possibile guarda qui: http://poi.apache.org/spreadsheet/limitations.html
Ciao
Giampiero
Novembre 13th, 2010 at 15:50
Perfetto Giampiero
ti ringrazio per la dritta.
Utilizzando open xml ho effettivamento risolto.
Per quanto riguarda i grafici,ora raccolgo un po di informazioni on-line su jfreechart e spero di riuscire.
Visto che sei un maestro e io un patito della programmazione (…ancora alle prime armi con java), credo ti disturbero ancora per avere altri utili consigli.
Grazie mille.
Ciro
Dicembre 4th, 2010 at 12:20
Ciao Giampiero, volevo farti una domanda:
Ho iniziato da poco a maneggiare la libreria POI per scrivere e leggere con java su file excel (versione 2003). Ho un piccolo problema, riesco a leggere e scrivere in qualsiasi cella io voglia, ma si presenta un problema:
Ho la necessità di scrivere in delle celle, che all’ora volta, sono input per altre celle che effetturano dei calcoli. Fin qua tutto bene, il problema e che io scrivo questi valori, excel lavora molto bene effettua i calcoli, ma quando vado a rileggerli su altre celle, questi non sono aggiornati. Se apro manualemnte il foglio excel vedo i miei dati inseriti e la corretta valorizzazione delle formule. Faccio chiudi ed excel mi dice: “All’apertura dei file con una versione precedentedi Excel, le formule contenute vengono ricalcolate”. Forse non sono stato chiarissimo e mi scuso, ma proprio non so come fare. Grazie mille.
Giampiero
Dicembre 5th, 2010 at 17:24
Ciao Giampiero
sono alle prese con il seguente problema:
Devo determinare la pria cella vuota all’interno di un forglio excel per poter scrivere da li in poi.
Mi sapresti dire quindi come si fa a leggere il contenuto di una cella?
Grazie
Ciro
Gennaio 28th, 2011 at 09:52
Ciao Giampiero,
volevo sapere di più su come trattare i grafici di Excel con Java.
Hai giustamente consigliato di usare jfreechart, ma volevo sapere se permette proprio di creare dei grafici Excel e salvarli direttamente nel file.
Grazie mille.
Ciao
Marcella
Gennaio 28th, 2011 at 10:25
Ciao Marcella, come già dicevo generare i grafici per Excel via POI è impossibile. Con JFreechart li puoi fare ma non saprei metterli dentro il documento (forse ci si potrebbe riuscire come immagine, ma non ho mai provato)
Ciao
Giampiero
Marzo 11th, 2011 at 11:19
Ciao Giampiero,
ho trovato molto utile la tua guida, volevo sapere se era possibile da una stringa in java, rappresentante l’ora (es. 15.30), inserirla in un foglio excel con formato ora e in caso affermativo potresti darmi qualche dritta? ti ringrazio
Marzo 11th, 2011 at 11:33
Solo l’ora non saprei dirti, l’ho fatto solo tramite data.
Ciao
Marzo 11th, 2011 at 14:22
e tramite data come si fa? scusami ma è da poco che conosco le poi di apache