Tipicamente si richiede di esportare in formato excel o pdf dati provenienti da liste presenti a front end.
Una soluzione automatica e veloce per questo è utilizzare la libreria dispay tag.
Se però le richieste sono più articolate è necessario utilizzare librerie ad hoc.
Nell'esempio seguente ci sono due liste diverse di dati (libri e persone) e si vuole vederle raggruppate in un unico excel.
In questo esempio vediamo come generare un excel con, sullo stesso foglio, prima i dati di una lista e poi dell'altra, frapponendo tra le due liste una riga vuota.
Per farlo ho utilizzato le librerie di Apache POI, già viste in altri post.
Il metodo doPost della servlet è il seguente:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try
{
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ "export.xls" + "\"");
ServletOutputStream out = response.getOutputStream();
HSSFWorkbook wb=getExcel();
wb.write(out);
out.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
L'oggetto HSSFWorkbook è così creato:
private HSSFWorkbook getExcel() throws Exception{
HSSFWorkbook workbook = new HSSFWorkbook();
// qui si caricano i dati (es. da db) delle due liste persone e libri
List<Persona> persone=getPersone();
List<Libro> libri=getLibri();
HSSFSheet firstSheet = workbook.createSheet("LISTE");
// riga intestazione prima lista
HSSFRow rowA = firstSheet.createRow(0);
HSSFCell cellA = rowA.createCell(0);
cellA.setCellValue(new HSSFRichTextString("Nome"));
HSSFCell cellB = rowA.createCell(1);
cellB.setCellValue(new HSSFRichTextString("Cognome"));
HSSFCell cellC = rowA.createCell(2);
cellC.setCellValue(new HSSFRichTextString("Eta'"));
int i=1;
for(Persona p:persone){
HSSFRow riga=firstSheet.createRow(i);
HSSFCell cellaNome=riga.createCell(0);
cellaNome.setCellValue(new HSSFRichTextString(p.getNome()));
HSSFCell cellaCognome=riga.createCell(1);
cellaCognome.setCellValue(new HSSFRichTextString(p.getCognome()));
HSSFCell cellaEta=riga.createCell(2);
cellaEta.setCellValue(new HSSFRichTextString(String.valueOf(p.getEta())));
i++;
}
// riga vuota
HSSFRow rigaVuota=firstSheet.createRow(i);
i++;
// riga intestazione nuova lista
HSSFRow rowLibro = firstSheet.createRow(i);
HSSFCell cellAutore = rowLibro.createCell(0);
cellAutore.setCellValue(new HSSFRichTextString("Autore"));
HSSFCell cellTitolo = rowLibro.createCell(1);
cellTitolo.setCellValue(new HSSFRichTextString("Titolo"));
HSSFCell cellPrezzo = rowLibro.createCell(2);
cellPrezzo.setCellValue(new HSSFRichTextString("Prezzo"));
HSSFCell cellCodice = rowLibro.createCell(3);
cellCodice.setCellValue(new HSSFRichTextString("Codice"));
i++;
for(Libro l:libri){
HSSFRow riga=firstSheet.createRow(i);
HSSFCell cellaAutore=riga.createCell(0);
cellaAutore.setCellValue(new HSSFRichTextString(l.getAutore()));
HSSFCell cellaTitolo=riga.createCell(1);
cellaTitolo.setCellValue(new HSSFRichTextString(l.getTitolo()));
HSSFCell cellaPrezzo=riga.createCell(2);
cellaPrezzo.setCellValue(new HSSFRichTextString(formattaDouble(l.getPrezzo())));
HSSFCell cellaCodice=riga.createCell(3);
cellaCodice.setCellValue(new HSSFRichTextString(l.getCodice()));
i++;
}
return workbook;
}
private String formattaDouble(double d){
NumberFormat nf=NumberFormat.getCurrencyInstance(Locale.ITALY);
nf.setCurrency(Currency.getInstance(Locale.ITALY));
return nf.format(d);
}
Una soluzione automatica e veloce per questo è utilizzare la libreria dispay tag.
Se però le richieste sono più articolate è necessario utilizzare librerie ad hoc.
Nell'esempio seguente ci sono due liste diverse di dati (libri e persone) e si vuole vederle raggruppate in un unico excel.
In questo esempio vediamo come generare un excel con, sullo stesso foglio, prima i dati di una lista e poi dell'altra, frapponendo tra le due liste una riga vuota.
Per farlo ho utilizzato le librerie di Apache POI, già viste in altri post.
Il metodo doPost della servlet è il seguente:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try
{
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ "export.xls" + "\"");
ServletOutputStream out = response.getOutputStream();
HSSFWorkbook wb=getExcel();
wb.write(out);
out.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
L'oggetto HSSFWorkbook è così creato:
private HSSFWorkbook getExcel() throws Exception{
HSSFWorkbook workbook = new HSSFWorkbook();
// qui si caricano i dati (es. da db) delle due liste persone e libri
List<Persona> persone=getPersone();
List<Libro> libri=getLibri();
HSSFSheet firstSheet = workbook.createSheet("LISTE");
// riga intestazione prima lista
HSSFRow rowA = firstSheet.createRow(0);
HSSFCell cellA = rowA.createCell(0);
cellA.setCellValue(new HSSFRichTextString("Nome"));
HSSFCell cellB = rowA.createCell(1);
cellB.setCellValue(new HSSFRichTextString("Cognome"));
HSSFCell cellC = rowA.createCell(2);
cellC.setCellValue(new HSSFRichTextString("Eta'"));
int i=1;
for(Persona p:persone){
HSSFRow riga=firstSheet.createRow(i);
HSSFCell cellaNome=riga.createCell(0);
cellaNome.setCellValue(new HSSFRichTextString(p.getNome()));
HSSFCell cellaCognome=riga.createCell(1);
cellaCognome.setCellValue(new HSSFRichTextString(p.getCognome()));
HSSFCell cellaEta=riga.createCell(2);
cellaEta.setCellValue(new HSSFRichTextString(String.valueOf(p.getEta())));
i++;
}
// riga vuota
HSSFRow rigaVuota=firstSheet.createRow(i);
i++;
// riga intestazione nuova lista
HSSFRow rowLibro = firstSheet.createRow(i);
HSSFCell cellAutore = rowLibro.createCell(0);
cellAutore.setCellValue(new HSSFRichTextString("Autore"));
HSSFCell cellTitolo = rowLibro.createCell(1);
cellTitolo.setCellValue(new HSSFRichTextString("Titolo"));
HSSFCell cellPrezzo = rowLibro.createCell(2);
cellPrezzo.setCellValue(new HSSFRichTextString("Prezzo"));
HSSFCell cellCodice = rowLibro.createCell(3);
cellCodice.setCellValue(new HSSFRichTextString("Codice"));
i++;
for(Libro l:libri){
HSSFRow riga=firstSheet.createRow(i);
HSSFCell cellaAutore=riga.createCell(0);
cellaAutore.setCellValue(new HSSFRichTextString(l.getAutore()));
HSSFCell cellaTitolo=riga.createCell(1);
cellaTitolo.setCellValue(new HSSFRichTextString(l.getTitolo()));
HSSFCell cellaPrezzo=riga.createCell(2);
cellaPrezzo.setCellValue(new HSSFRichTextString(formattaDouble(l.getPrezzo())));
HSSFCell cellaCodice=riga.createCell(3);
cellaCodice.setCellValue(new HSSFRichTextString(l.getCodice()));
i++;
}
return workbook;
}
private String formattaDouble(double d){
NumberFormat nf=NumberFormat.getCurrencyInstance(Locale.ITALY);
nf.setCurrency(Currency.getInstance(Locale.ITALY));
return nf.format(d);
}
Nessun commento:
Posta un commento