lundi 26 octobre 2009

java : export excel et flux a telecharger

Voici un petit code permettant de realiser un export Excel et de le recevoir par une servlet ... Cet exemple s'appuie sur la librairie POI d'apache :


public void exportExcelCsa(ArrayList pTitreColonne, ArrayList pIndiceColonne, ArrayList pListe,
HttpServletResponse pReponseHttp, final boolean pTest, final String pNomFichier) throws FretOrchestreException {

// creation d'un classeur
final HSSFWorkbook vClasseurExcel = new HSSFWorkbook();
// creation des styles
// police des titres
final HSSFFont vFontHeader = vClasseurExcel.createFont();
vFontHeader.setFontHeightInPoints((short) 10);
vFontHeader.setFontName("Times New Roman");
vFontHeader.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
vFontHeader.setColor(HSSFColor.WHITE.index);
// style des cellules de titres
final HSSFCellStyle vStyleTitreColonne = vClasseurExcel.createCellStyle();
vStyleTitreColonne.setFillForegroundColor(HSSFColor.SEA_GREEN.index);
vStyleTitreColonne.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
vStyleTitreColonne.setFont(vFontHeader);
vStyleTitreColonne.setBorderBottom(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setBottomBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setBorderLeft(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setLeftBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setBorderRight(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setRightBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setBorderTop(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setTopBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setAlignment(HSSFCellStyle.ALIGN_CENTER);
vStyleTitreColonne.setWrapText(true);
// police des données
final HSSFFont vFont = vClasseurExcel.createFont();
vFont.setFontHeightInPoints((short) 10);
vFont.setFontName("Times New Roman");
// style des cellules de données
final HSSFCellStyle vStyleDonnees = vClasseurExcel.createCellStyle();
vStyleDonnees.setBorderBottom(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setBottomBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setBorderLeft(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setLeftBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setBorderRight(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setRightBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setBorderTop(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setTopBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setFont(vFont);
vStyleDonnees.setAlignment(HSSFCellStyle.ALIGN_LEFT);

/* creation de l'onglet Recherche */
final String vTitre = "Recherche";
final HSSFSheet vOnglet = vClasseurExcel.createSheet(vTitre);
//genererEnTeteEtPiedDePage(vTitre, vOnglet, true);

/* Titre des colonnes. */
creerLigneTitre(vOnglet, pTitreColonne, vStyleTitreColonne);

/* Contenu de la liste pour la version retraitée. */
creerContenuFretListe(vOnglet, pListe, pIndiceColonne, vStyleDonnees);

/* Génération en tete et pied de page. */
final HSSFHeader vEnTete = vOnglet.getHeader();
vEnTete.setLeft("Commandes en saisie");

final HSSFFooter vPiedDePage = vOnglet.getFooter();
final SimpleDateFormat vSimpleDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
vPiedDePage.setLeft(vSimpleDateFormat.format(new Date()));
vPiedDePage.setRight(HSSFFooter.page() + " / " + HSSFFooter.numPages());

OutputStream vOutput = null;
try {
// flux de sortie
if (pTest) {
final FileOutputStream vFileOut = new FileOutputStream("c:\\" + pNomFichier + ".xls");
vClasseurExcel.write(vFileOut);
vFileOut.close();
} else {
vOutput = pReponseHttp.getOutputStream();
pReponseHttp.setContentType("application/vnd.ms-excel");
pReponseHttp.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
pReponseHttp.setHeader("Pragma", "public");
pReponseHttp.setDateHeader("Expires", 0);
pReponseHttp.setHeader("Content-disposition", "attachment;filename=\"" + pNomFichier + ".xls\"");
pReponseHttp.setStatus(HttpServletResponse.SC_OK);

vClasseurExcel.write(vOutput);
}
} catch (Exception vExc) {
sLog.error("Echec d'enregistrement du fichier généré (échec d'écriture, répértoire inconnu,...)" + vExc.getMessage());
} finally {
//fermeture du flux
try {
if (vOutput != null) {
vOutput.close();
}
} catch (IOException vIoExce) {
sLog.error("Echec d'enregistrement du fichier généré (échec d'écriture, répertoire inconnu,...)" + vIoExce.getMessage());
}
}
}

Aucun commentaire:

Enregistrer un commentaire