Bonjour,

Voilà pour une application JEE, je cherche à exporter le contenu d'une listGrid (smartGWT) au format Excel.
Pour cela, je fais dans une servlet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		InstanceGrid[] instanceGrid = (InstanceGrid[]) request.getSession().getAttribute( "instanceGrid" );
		String[]  listTitleField = request.getParameter( "fieldTitleVisible" ).split( "\\|" );
		String[]  listNameField = request.getParameter( "fieldNameVisible" ).split( "\\|" );
 
		File excelFile = new File( "Export.xls" );
 
		try {
			WritableWorkbook workbook = Workbook.createWorkbook( excelFile );
			WritableSheet sheet = workbook.createSheet( "Export", 0 );
			//Crée le format d’une cellule
//			WritableFont arial10font = new WritableFont( WritableFont.ARIAL, 20,
//								WritableFont.BOLD, true, UnderlineStyle.NO_UNDERLINE,
//								Colour.BLACK, ScriptStyle.NORMAL_SCRIPT);
//			WritableCellFormat arial10format = new WritableCellFormat( arial10font );
			//1ere ligne title
			for (int i = 0; i < listTitleField.length; i++) {
				//Crée un label à la ligne 0, colonne i avec le format spécifique
				Label label = new Label( i, 0, listTitleField[i] );
				//Ajout des cellules
				sheet.addCell(label);
			}
 
			for (int i = 0; i < instanceGrid.length; i++) {
				for (int j = 0; j < listNameField.length; j++) {
					System.out.println( "listNameField[j] = _" + listNameField[j] + "_" );
					if ( listNameField[j].equals( "" ) == false ) {
						Label label = new Label( j, i+1, "" );
						if ( listNameField[j].equals( "indice3it" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getIndice3IT() );
						} else if ( listNameField[j].equals( "fab" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getFabricabilite() );
						} else if ( listNameField[j].equals( "boxcode" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getBoxCode() );
						} else if ( listNameField[j].equals( "refcatia" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getRefCatia() );
						} else if ( listNameField[j].equals( "ref3it" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getRef3it() );
						} else if ( listNameField[j].equals( "status" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getEtat() );
						} else if ( listNameField[j].equals( "importdate" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getImportDate().toString() );
						} else if ( listNameField[j].equals( "type" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getType() );
						} else if ( listNameField[j].equals( "indicecatia" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getIndiceCatia() );
						} else if ( listNameField[j].equals( "instance_id" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getInstanceId().toString() );
						} else if ( listNameField[j].equals( "istTypeOf" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getIstTypeOf() );
						} else if ( listNameField[j].equals( "quantity" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getQuantity().toString() );
						} else if ( listNameField[j].equals( "searchFilter" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getSearchFilter() );
						} else if ( listNameField[j].equals( "catiastatus" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getStatusCatia() );
						} else if ( listNameField[j].equals( "lotbe" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getLotBE() );
						} else if ( listNameField[j].equals( "doublon" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getIsDoublon().toString() );
						} else if ( listNameField[j].equals( "operatingTemperature" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getOperatingTemperature() );
						} else if ( listNameField[j].equals( "frequencyBand" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getFrequencyBand() );
						} else if ( listNameField[j].equals( "losses" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getLosses().toString() );
						} else if ( listNameField[j].equals( "tos" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getTos().toString() );
						} else if ( listNameField[j].equals( "finishing" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getFinishing()  );
						} else if ( listNameField[j].equals( "processing" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getProcessing() );
						} else if ( listNameField[j].equals( "cao_mass" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getCaoMass() );
						} else if ( listNameField[j].equals( "computed_mass" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getComputedMass() );
						} else if ( listNameField[j].equals( "thickness" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getThickness() );
						} else if ( listNameField[j].equals( "category" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getCategory() );
						} else if ( listNameField[j].equals( "extremity1" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getExtremity1() );
						} else if ( listNameField[j].equals( "extremity2" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getExtremity2() );
						} else if ( listNameField[j].equals( "description" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getDescription() );
						} else if ( listNameField[j].equals( "extendedTemperature" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getExtendedTemperature() );
						} else if ( listNameField[j].equals( "light" ) ) {
							label = new Label( j, i+1, instanceGrid[i].getLight() );
						}
						sheet.addCell( label );
					}		
				}
			}
 
			//Ecriture et fermeture du classeur
			workbook.write();
			workbook.close();
		} catch (RowsExceededException e1) {
			e1.printStackTrace();
		} catch (WriteException e1) {
			e1.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			System.out.println("Le fichier \"Export.xls\" à été généré correctement.");
		}
 
 
		// Restitution du fichier ZIP créé sous forme de flux dans la réponse
		response.setContentType("application/vnd.ms-excel");
		String fichier =  excelFile.getPath() ;
		System.out.println( "fichier = " + fichier );
	   	response.setHeader( "Content-disposition", "attachment; filename=\"" + fichier + "\"" );
 
		// Création d?un buffer de sortie afin d?améliorer les perf d?écriture
		OutputStream dest = response.getOutputStream(); 
		BufferedOutputStream out = new BufferedOutputStream( dest );
 
		//Création du buffer d?entrée
		final int BUFFER = 2048;
		byte data[] = new byte[BUFFER];
		FileInputStream fi = new FileInputStream( excelFile );
		BufferedInputStream buffi = new BufferedInputStream(fi, BUFFER);
 
		//Écriture des entrées dans le flux de sortie par paquet de taille égale aux tampons d?entrée et de sortie
		int count;
		while((count = buffi.read(data, 0, BUFFER)) != -1) {
			out.write(data, 0, count);
		}
 
		//Fermeture des flux
		buffi.close();
//		out.close();
 
		// Calculer le flux à renvoyer au client
		byte[] bytes = out.toString().getBytes();
 
		// Envoyer le flux dans la réponse
		OutputStream os = response.getOutputStream();
		os.write( bytes );
		os.close();
		out.close();
	}
Mon fichier se crée bien mais lorsque je veux l'ouvrir, le message :

Excel a rencontré un contenu illisible dans "Export.xls". Voulez-vous récupérer le contenu de ce classeur? Si la source de ce classeur est fiable, cliquez sur Oui.

mais je ne sais pas d'où ça peut venir. Si je clique sur Oui, le fichier s'ouvre avec les bonne valeur à l'intérieur.

Est ce que quelqu'un aurait un idée de savoir pourquoi ce message apparait?

Merci