Export Excel

cs_viking16 Messages postés 1 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 6 août 2004 - 6 août 2004 à 17:23
cs_seito Messages postés 56 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 24 mai 2006 - 6 déc. 2004 à 23:16
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

}

2 réponses

youess81 Messages postés 40 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 5 juin 2005
17 août 2004 à 13:56
salut j ai deja travillé avec excel mais j ai utiliser une API qui se trouve sur le net Jexcel qui fonctionne a 100% e
0
cs_seito Messages postés 56 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 24 mai 2006
6 déc. 2004 à 23:16
est ce que quelqu'un peut m'aider à se procurer une version qui marche de Jexcel je cherche et je cherche et les archive sont soit corrompus soit je ne comprend rien
merci d'avance
0
Rejoignez-nous