L’objectif de cet article est de présente une façon très simple de générer des rapports Excel en Java, via l’utilisation du framework MVC Spring.

1) Une petite explication :

Le framework spring (http://www.springframework.org) met à notre disposition tous les outils utiles à la création de documents PDF. Spring etant un framework MVC propre, la creation d’un Fichier Excel passe par la réalisation d’un Controller et d’une Vue qui etend AbstractExcelView.

Voici un exemple de code…

2) Un controller… :

Alors voici un exemple de controller Spring très simple, qui va juste deposer dans le model une valeur de test, utile pour valider le fonctionnement de notre vue.

Chemin : com.tellaw.test.controllers

package com.tellaw.test.controllers;

import java.util.*;
import javax.servlet.http.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;

@SuppressWarnings("unchecked")
public class ExcelController extends AbstractController
{

	protected final Log logger = LogFactory.getLog(getClass());

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

    	Map model = new HashMap();
	model.put ("testValue", "Ma String de test de ma vue Excel !!!");
        return new ModelAndView("excel-view", "model", model);

    }

}

3) Une vue excel :

Voici la vue, qui va permettre de mettre en forme le document Excel. La vue se base sur l’API POI de Apache, permettant l’exploitation de documents microsofts (excels, words, powerpoints…) en Java.

Chemin : com.tellaw.test.controllers

package com.tellaw.test.view;

import java.util.*;

import javax.servlet.http.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import org.springframework.web.servlet.view.document.AbstractExcelView;

@SuppressWarnings("unchecked")
public class ExcelExportView extends AbstractExcelView  {

    protected final Log logger = LogFactory.getLog(getClass());
    private static String SHEET_NAME = "feuille";

    protected void buildExcelDocument(	  Map model,
    							HSSFWorkbook workbook,
    							HttpServletRequest request,
    							HttpServletResponse response ) {

        model = (Map)model.get("model");

        // Get Active Datas
        workbook = addSkeleton( workbook );

    	// Define Style
    	HSSFCellStyle style = workbook.createCellStyle();
        HSSFFont boldFont = workbook.createFont();
        boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
        style.setFillForegroundColor( HSSFColor.LIGHT_TURQUOISE.index );
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style.setFont(boldFont);

    	// Define headers
        cell = getCell( sheet, 1, 1 );
        cell.setCellStyle( style );

        // Number
    	setText ( cell , model.get("testValue") );

    }

    private HSSFWorkbook addSkeleton ( HSSFWorkbook workbook ) {

    	HSSFSheet sheet;
        HSSFCell cell;

    	sheet = workbook.createSheet( ExcelExportView.SHHET_NAME );

    	// Define Style
    	HSSFCellStyle style = workbook.createCellStyle();
        HSSFFont boldFont = workbook.createFont();
        boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        style.setFont(boldFont);

    	// Define headers
        cell = getCell( sheet, 3, 1 );
        cell.setCellStyle(style);
    	setText ( cell , "valeur de test du model ?" );

    	autoSizeCols( sheet );

    	return workbook;
    }

}

4) Configurer sur contexte Spring :

Il suffit ensuite de faire le wiring de ces objets dans le contexte de Spring…

Chemin : WEB-INF/springapp-servlet.xml (propre à mon test)




	
	

	
    
    

    

	
    


excelController
            
        
    

	
    

    


5) Mapper la vue via un properties :

J’aime bien séparer le mapping des vues dans un fichier Properties externe, voici le détail du mien :

Chemin : ressources/views.properties (propre à mon test et à ma compilation maven)

excel-view.(class)=com.tellaw.test.controllers.ExcelExportView

5) Annèxes, et la suite ????