Salut tout le monde !
Tout d'abord je tiens deja a vous remercier de vous soucier de mon probleme.
Plus bas vous trouverez mon code (qui fonctionne à 99% !!). Ce dernier permet (à partir d'une servlet) de generer un fichier excel à partir de n'importe quel resultset et ce pour n'importe quel type de données.
Je disais qu'il fonctionnait à 99%.... en effet, il reste un petit bug !! Quand une colonne contient des nombres, mais qu'ils sont sous forme alpha (exemple des numéro de TVA, des codes postaux, ect) et qu'ils sont enormes (du style une 20aine de chiffres) et bien Excel il s'en fout il les considère comme des chiffres et me les affiche sous forme exponentielle et de ce fait pert de la precision.
Donc en gros les vrais chiffres de ma db sont différents des chiffres retrouvés dans excel... plutot genant !!
Est ce que qqu peut m'aider ?
Merci d'avance, julien.
-------------------------------------------------------
PrintWriter pw = response.getWriter();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Expires","1");
short rownum=0;
ResultSetMetaData rsmd = rs.getMetaData();
int cnt = rsmd.getColumnCount();
/* recup des labels */
StringBuffer slabel= new StringBuffer(500);
Map params = new HashMap();
for (short i= 0 ; i<cnt;i++)
{
switch (rsmd.getColumnType(i))
{
case Types.CHAR:
case Types.VARCHAR:
case Types.BOOLEAN:
type="CHAR";break;
case Types.INTEGER:
case Types.DOUBLE:
case Types.DECIMAL:
case Types.SMALLINT:
case Types.FLOAT:
type="NUM";
break;
case Types.DATE:
case Types.TIMESTAMP:
type="DATE";
break;
}
/* example : field2 = "DATE" */
params.put("field"+Integer.toString(i+1),type);
String label =rsmd.getColumnLabel(i+1);
if (label == null || label.trim().length() < 1)
{
label = rsmd.getColumnName(i+1);
}
slabel.append(label);
slabel.append("\t");
}
/* fin de recup des labels */
pw.println(slabel.toString());
/* les rows maintenant */
String cellValue;
while (rs.next()) // --> balaye toutes les lignes
{
StringBuffer sbrow=new StringBuffer(500);
for(short i=0 ;i < cnt;i++) // --> balaye toutes les colonnes
{
Object obj = rs.getObject(i+1);
String cellvalue;
if (obj != null)
{
if (params.get("field"+Integer.toString(i+1))=="CHAR")
{
cellValue = "\"" + obj.toString() + "\"";
/* meme en le forcant avec des "" il passe en nombre ! */
}
else
{
if (params.get("field"+Integer.toString(i+1))=="DATE")
{
cellValue = obj.toString() ;
}
else
{
if (params.get("field"+Integer.toString(i+1))=="NUM")
{
cellValue=obj.toString().replace('.',',') ;
}
else
{
/* type = UNKNOWN */
cellValue = obj.toString() ;
}
}
}
sbrow.append(cellValue);
}
else // object is null
{
sbrow.append(" ");
}
sbrow.append("\t"); // tabulation
} // fin d'un ligne de la table
pw.println(sbrow.toString()); // ecriture sur la response
}