Exception ClassCast avec WritableCell dans JExcel

Signaler
Messages postés
97
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
10 février 2009
-
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 mars 2014
-
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

Messages postés
97
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
10 février 2009

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
Messages postés
97
Date d'inscription
jeudi 3 janvier 2008
Statut
Membre
Dernière intervention
10 février 2009

personne n'a une idée pour ca ?
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Statut
Membre
Dernière intervention
11 mars 2014
1
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 !