1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
package ma.gfi.testDwr;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.SQLException;
import javax.servlet.jsp.PageContext;
import jxl.Workbook;
import jxl.format.Colour;
import jxl.format.ScriptStyle;
import jxl.format.UnderlineStyle;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
public class ReportDWRAction{
private ArrayList<ArrayList<String>> liste0 = new ArrayList<ArrayList<String>>();
public void doReport() {
//nous précisons dans len-tête de la réponse de la Servlet, que le document est un
// fichier Excel, puis nous précisons le nom de fichier
WebContext ctx = WebContextFactory.get();
HttpServletResponse response = ctx.getHttpServletResponse();
response.setContentType("application/octet-stream");
response.setHeader("Content-Type","application/force-download");
response.setHeader("Content-Disposition", "attachment; filename=monfichier.xls;");
// nous créyons notre liste de liste
ArrayList<String> l1 = new ArrayList<String>();
l1.add("aaa");
l1.add("bbb");
liste0.add(l1);
// Maintenant, nous récupérons le flux de sortie de la Servlet, car cest sur lui que nous allons écrire le
// fichier Excel, cest ce qui va nous permettre de lenvoyer au navigateur en affichant la boîte de dialogue
// téléchargement de fichier.
try {
// ServletOutputStream out2 = response.getOutputStream();
// création du classeur
WritableWorkbook classeur = Workbook.createWorkbook(response.getOutputStream());
// création d'une feuille de calcul
WritableSheet feuille = classeur.createSheet("Page 1", 0);
writeDataSheet(feuille, liste0);
// Pour finir, nous sauvegardons le classeur, puis nous le fermons avant de lenvoyer sur la sortie de la Servlet
// Envoi au navigateur et fermeture
classeur.write();
classeur.close();
response.flushBuffer();
response.getOutputStream().flush();
response.getOutputStream().close();
System.gc();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (WriteException e)
{
e.printStackTrace();
}
}
private void writeDataSheet(WritableSheet s, ArrayList<ArrayList<String>> liste )
throws WriteException
{ int indexRow=1 ,indexCol =0;
int index=0;
for (ArrayList<String> data : liste) {
for (String element : data) {
element = element.replaceAll("&39;", "'");
element = element.replaceAll("&32;", " ");
data.set(index, element);
index++;
}
index = 0;
}
//format des cellules du nom des colonnes
WritableFont arial10font = new WritableFont(WritableFont.ARIAL, 14,WritableFont.BOLD, true, UnderlineStyle.NO_UNDERLINE,Colour.BLUE, ScriptStyle.NORMAL_SCRIPT);
WritableCellFormat arial10format = new WritableCellFormat(arial10font);
//noms de colonnes à la ligne 0 avec le format spécifique
for ( String colNom : liste.get(liste.size()-1)) {
Label label = new Label(indexCol, 0, colNom, arial10format);
s.addCell(label);
indexCol++;
}
indexCol = 0;
for (ArrayList<String> data : liste.subList(0, (liste.size()-1))) {
for (String element : data) {
Label label = new Label(indexCol, indexRow,element);
s.addCell(label);
indexCol++;
}
indexRow++;
indexCol = 0;
}
}
} |
Partager