IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

Problème de lecture avec JXL API


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1
    Par défaut Problème de lecture avec JXL API
    Bonjour à tous,

    J'ai besoin de votre aide car je rencontre un problème pour lire un fichier Excel édité via java et jxl api.

    Je vous explique mon problème :
    J'ai un fichier excel avec des formules, j'écris dans ce fichier excel une valeur qui va ensuite interagir avec les formules et tout recalculer. Jusque là ca marche, mon problème intervient lorsque je vais lire les valeurs recalculées. Ces valeurs ne prennent pas en compte l'écriture faite auparavant, donc je me retrouve avec les mêmes valeurs qu'avant avoir écrit alors que lorsque j'ouvre le fichier excel (à la main) les valeurs ont bien changées.

    Je vous serez vraiment reconnaissante si vous pouviez m'aider à comprendre le problème car cela fait 2 jours que je cherches...

    Voici les bouts de code que j'utilise :

    Pour écrire dans le fichier Excel :
    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
    public void DataSend(String ExcelName, ComputeInfo GUIInfo, String Label)throws JDOMException, BiffException, WriteException, IOException{
     
    		WriteFile myWriteFile = new WriteFile();
    		ReadFile myReadFile = new ReadFile();
    		Workbook workbook = null;
    		String path = " ";
    		int count;
     
    		/* Récupération des données XML */
    		XMLData();
     
    		Workbook model = Workbook.getWorkbook(new File(ExcelName));
    		if (ExcelName == "Antenna DataBase.xls") path = "Antenna.xls";
     
    		WritableWorkbook newDoc = Workbook.createWorkbook(new File(path), model);
    		WritableSheet worksheet = newDoc.getSheet(0);
     
    		if(Label == "WriteSpotSizeAndFrequency"){
    			for(count = 0; count < GUIInfo.NbTailleSpot; count++){
    				System.out.println("tab" + count);
    				if (count == 0){
    					myWriteFile.writeCell(worksheet, AntennaInformation.XMLFrequencyDownlink, GUIInfo.DownFrequency);
    					myWriteFile.writeCell(worksheet, AntennaInformation.XMLFrequencyUplink, GUIInfo.UpFrequency);
    					myWriteFile.writeCell(worksheet, AntennaInformation.XMLSpotSize, GUIInfo.TailleSpot[count]);
    					newDoc.write();
    					newDoc.close();
     
    					/*Récupération du classeur Excel (en lecture)*/ 
    					workbook = Workbook.getWorkbook(new File(path));
    					workbook.close();
    					model.close();
     
    					AntennaDataBaseRecovery(path);
    					GUIInfo.Gain[count] = AntennaInformation.Gain;
     
    					System.out.println("Après lecture Send: " + AntennaInformation.Gain);
    				}
    				/*else {
    					newDoc = Workbook.createWorkbook(new File("Antenna.xls"), model);
    					worksheet = newDoc.getSheet("ant_reflecteur");	
    					myWriteFile.writeCell(worksheet, AntennaInformation.XMLFrequencyDownlink, GUIInfo.DownFrequency);
    					myWriteFile.writeCell(worksheet, AntennaInformation.XMLFrequencyUplink, GUIInfo.UpFrequency);
    					myWriteFile.writeCell(worksheet, AntennaInformation.XMLSpotSize, GUIInfo.TailleSpot[count]);
    					newDoc.write();
    					newDoc.close();
    					AntennaDataBaseRecovery("Antenna.xls");
    					GUIInfo.Gain[count] = AntennaInformation.Gain;
    				}*/
     
    			}
    		}
     
     
    //		if(newDoc!=null){
    //			 /*On ferme le workbook pour libérer la mémoire */
    //			newDoc.close(); 
    //		}
     
    	}
    Fonction écrire :
    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
    public void writeCell(WritableSheet ws0, int[] location, double data) {
    		WritableCell cell0 = ws0.getWritableCell(location[1], location[0]);
    		CellFormat format = cell0.getCellFormat();
    		Number cellbis = new jxl.write.Number(location[1],location[0],data) ;
    		cellbis.setCellFormat(format);
    		try {
    			ws0.addCell(cellbis);
    		} catch (RowsExceededException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		} catch (WriteException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    	}
    Lecture dans le fichier Excel :
    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
    public void AntennaDataBaseRecovery(String ExcelName)throws JDOMException, BiffException, IOException{
     
    		ReadFile myReadFile = new ReadFile();
    		AntennaInformation = new AntennaInfo();
     
    		int CountLoop;
    		String ExcelSheet;
    		Workbook workbook = null;
     
    		/* Récupération des données XML */
    		XMLData();
     
    		/*Récupération du classeur Excel (en lecture)*/ 
    		workbook = Workbook.getWorkbook(new File(ExcelName));
     
    		ExcelSheet = "ant_reflecteur";
     
    		AntennaInformation.SpotSize = 0;
    		AntennaInformation.FrequencyDownlink = 0;
    		AntennaInformation.FrequencyUplink = 0;
    		AntennaInformation.AntennaSize = 0;
    		AntennaInformation.Gain = 0;
     
    		AntennaInformation.FrequencyDownlink = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLFrequencyDownlink[0] , AntennaInformation.XMLFrequencyDownlink[1]);
    		AntennaInformation.FrequencyUplink = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLFrequencyUplink[0] , AntennaInformation.XMLFrequencyUplink[1]);
    		AntennaInformation.SpotSize = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLSpotSize[0] , AntennaInformation.XMLSpotSize[1]);
    		AntennaInformation.Gain = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLGain[0] , AntennaInformation.XMLGain[1]);
    		AntennaInformation.AntennaSize = myReadFile.getDoubleExcelContent(workbook, ExcelSheet, AntennaInformation.XMLAntennaSize[0] , AntennaInformation.XMLAntennaSize[1]);
     
     
    		System.out.println("ExcelName : " + ExcelName);
    		System.out.println("Après lecture Recovery: " + AntennaInformation.Gain);
    		System.out.println("Après lecture Recovery: " + AntennaInformation.SpotSize);
    		System.out.println("Après lecture Recovery: " + AntennaInformation.FrequencyDownlink);
    		System.out.println("Après lecture Recovery: " + AntennaInformation.FrequencyUplink);
    		System.out.println("Après lecture Recovery: " + AntennaInformation.AntennaSize);
     
    		if(workbook!=null){
    			 /*On ferme le workbook pour libérer la mémoire */
    			workbook.close(); 
    		}
    	}
    Fonction lire :
    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
    public double getDoubleExcelContent(Workbook ExcelFile, String ExcelSheet, int ExcelRow, int ExcelColumn)throws BiffException, IOException{
     
    		/* Déclaration des variables de type "Excel" */
     
    		Sheet sheet;
    		//Cell CellSearch;
    		Cell CellSearch;
    		String StringSearch;
    		double Content = 0;
     
    		/* Pointe vers la feuille souhaitée */
    		sheet = ExcelFile.getSheet(ExcelSheet);
    		/* Sélectionne la cellule voulue */
    		//CellSearch = sheet.getCell(ExcelColumn,ExcelRow); 
    		CellSearch = sheet.getCell(ExcelColumn,ExcelRow);
     
    		/* Sélectionne la cellule voulue */
    		/* Renvoie le contenu de la cellule voulue */
    		StringSearch = CellSearch.getContents(); 
     
     
    		if (StringSearch != ""){
    			try {
    				Content = Double.parseDouble(StringSearch.toString().replaceAll(",", "."));
    			}					
    			catch (Exception e) {
    			javax.swing.JOptionPane.showMessageDialog(null, "Erreur : la valeur '" + StringSearch + "' située dans la cellule ( " + ExcelColumn + " , " + ExcelRow + " ) + n'a pu être convertie en double");
    			}
    		}
    		else Content = 0;
     
     
     
    		return Content;
    	}

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    JExcel ne calcule pas les formules. Quand on change une valeur qui intervient dans une formule, lui il n'est pas au courant.
    Excel, par contre, s'en rendra compte au démarrage, et enregistrera même le nouveau résultat lors de la prochaine sauvegarde.

    Il n'y a pas de problème, c'est le comportement normal. Si tu veux calculer des choses, fais-le, ne va pas croire que JExcel va le faire à ta place. JExcel n'est pas un tableur, c'est un outil pour écrire des fichiers (qui se trouvent être le format de fichier d'un tableur).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Problème de lecture avec les Socket
    Par Kevin12 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 18/03/2009, 15h40
  2. Problème de jar avec l'API Java d'open Office (com.sun.star)
    Par mazizou dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 27/05/2008, 16h13
  3. Problème de lecture avec un player audio ouvert par SWFobject
    Par ceddus dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/06/2007, 04h47
  4. [DEBUTANT] Problème de lecture avec un fscanf
    Par Pingouin dans le forum C
    Réponses: 26
    Dernier message: 28/05/2006, 18h10
  5. [DOM] Problème de lecture avec DOM
    Par samios dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 29/09/2004, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo