Exception ClassCast avec WritableCell dans JExcel

cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009 - 2 févr. 2009 à 15:28
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 - 3 août 2010 à 13:41
Bonjour,

J'ai un petit souci avec JExcel. J'ai une

java.lang.ClassCastException: jxl.biff.EmptyCell cannot be cast to jxl.write.Label

à la ligne où il y a :

Code :



Label cat_lbl = (Label) cat_cell;



je ne comprend pas pourquoi il me fait ca vu que je suis à la lettre la doc fournie avec l'API; voici mon code :

Code :



import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import javax.swing.tree.DefaultMutableTreeNode;
import jxl.*;
import jxl.write.*;

import javax.swing.*;



public class XLS_Generator {

public String xlssourcepath = null;
public String xlssourcedestination=null;
public boolean success=false;
private int nbelements=0;
public Workbook sourcedoc=null;
public WritableWorkbook destdoc=null;
private WritableSheet worksheet=null;
public boolean proceedconfirmation=true;
private int i=0;

public XLS_Generator (String source, String destination, DefaultMutableTreeNode rootnode) throws WriteException, IOException {

this.xlssourcedestination=destination;

this.xlssourcepath=source;


try {

this.sourcedoc= Workbook.getWorkbook(new File(source));
this.destdoc = Workbook.createWorkbook(new File(destination),this.sourcedoc);
this.worksheet=this.destdoc.getSheet(0);

}

catch (Exception e) {

JOptionPane.showMessageDialog(null, e.getMessage(),"XLS report generator",JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}


initialize(rootnode,0);
this.destdoc.write();
this.destdoc.write();

}


private boolean initialize(DefaultMutableTreeNode node, int i) throws IOException, WriteException { //this method initializes the xls report by writing the first line that corresponds to the titles of the columns in the document



if (proceedconfirmation) {

Integer level=this.i+1;

String levelmsg=level.toString();

switch (level) {

case 1 : levelmsg="first"; break;

case 2 : levelmsg="second"; break;

case 3 : levelmsg="third"; break;

default : levelmsg+="th";

}


int response = JOptionPane.showConfirmDialog(null, "Please select a name for your column ","XLS Generator",JOptionPane.OK_CANCEL_OPTION);


if (response==JOptionPane.OK_OPTION) {

if (node.getChildAt(0).isLeaf()==false) {

String generalcategory = JOptionPane.showInputDialog(null,"Name for the column");

WritableCell cat_cell = this.worksheet.getWritableCell(this.i,0);

Label cat_lbl = (Label) cat_cell;
cat_lbl.setString(generalcategory);

this.i++; //pour passer a la colonne suivante

Label percent_lbl = new Label(this.i,0,"%");
this.worksheet.addCell(percent_lbl);



i++; // to go to the next column

this.destdoc.write();


DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getChildAt(0);

if(child.getChildAt(0).isLeaf()==false) {

initialize (child,this.i);

}


}

}

if (response==JOptionPane.CANCEL_OPTION) {

JOptionPane.showMessageDialog(null, "The xls won't be generated");
this.proceedconfirmation=false;

}





}



return proceedconfirmation;

}

}



juste pour info : cette classe me permet en fait de reproduire la hierarchie d'un jtree dans un fichier excel ... j'en suis qu'au début j'ai pas encore fini l'algo mais là ca coince deja comme vous le voyez ...



merci d'avance pour le coup de main ...

3 réponses

cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
2 févr. 2009 à 19:29
j'ai resolu ce souci d'exception c'etait simplement une erreur bete : par oubli j'ai mis deux fois mondoc.write() au lieu de faire mondoc.write() et mondoc.close()


par contre j'ai un autre souci est-ce que vous pouvez m'aider à y voir plus clair :


j'execute ce code là





Workbook source = Workbook.getWorkbook(new File("C:/Data/meavy/myxls.xls"));
WritableWorkbook dest = Workbook.createWorkbook(new File("C:/Data/meavy/myxls2.xls"), source);
   
   WritableSheet sheet = dest.getSheet(0);
   
                        for (int i = 0; i < 3; i++) {
    
    sheet.addCell(new Label(0+i, 25, "code"));
    sheet.addCell(new Label(1+i, 25, "couleur"));
    
   }
   dest.write();
   dest.close();
 


 


il me sort effectivement 3 colonnes code mais seulement une seule colonne couleur !!

code | code | code | couleur

alors que mon code est sensé en créer une alternance des deux :

code | couleur | code | couleur | code | couleur
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
3 févr. 2009 à 09:46
personne n'a une idée pour ca ?
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
3 août 2010 à 13:41
Le message est ancien, mais la réponse tellement évidente : quand tu fais 0+i et 1+i, tu écrases ce que tu as écrit dès ta deuxième itération ...

i=0 0+i=1 1+i=2
i=1 0+i=2 1+i=3
i=2 0+i=3 1+i=4

J'espère que depuis le temps tu avais trouvé la solution ...


*************************
Here we go !
0