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 :

[POI] [EXCEL] Problème de mise à jour des cell lors d'une modification d'un fichier xls existant


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Points : 15
    Points
    15
    Par défaut [POI] [EXCEL] Problème de mise à jour des cell lors d'une modification d'un fichier xls existant
    Bonjour,

    J'ai créer un petit programme java qui gènère les horaires en heures pour 1 mois entier, pour chaque emplyoé.

    Et j'ai également les fichier xls pour chaque employé, avec à l'intérieur une feuille pour chaque mois.
    Je dois donc entrer les horraires correspondant à côté de chaque jour. soit 4 case heure début matin, heure fin matin, heure début aprèsmidi heure fin après midi. je dois également modifier une case pour dire si la personne travail la nuit.
    tous ca c'est bon, les horaires sont rentré sans problème les case nuit sont marquée juste et tout.
    Le seul problème, c'est la mis-à-jour des autres cellule. exemple:
    à côté des 4 case que je dois remplir pour les heures il y a une case total, qui calcul le nombre d'heure total pour chaque jour, en base il y a la somme pour tout le mois, et d'autre case sont également utilisée.
    en gros après quand j'ouvre le fichier, toutes les case que je devais remplir sont bien remplient. mais les cellule qui contiennent une formule qui dépendant de ces cases reste inchangée. Et par exemple pour que le total du jour 1 s'update, je dois effacer l'une des case des heure et la re-rentrer manuelement et après c'est bon (juste pour le jour 1) du coup je dois tout refaire à la main en gros, ce qui rend le programme totalement useless....

    Donc voilà, comment faire en sorte que les ceullules s'update?
    voici le code de l'écriture:
    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
    private void writeScheduleForMonth(int month, int emplID){
    		String fileName = pathFolder+"\\Horaires - empl"+emplID+" - manu.xls";
    		System.out.println(fileName+" :: "+emplIDHashMap.get(emplID));
    		System.out.println("Mois de "+monthIDHashMap.get(month));
    		Iterator<Integer> it = scheduleOfTheMonth.keySet().iterator();
    		try {
    			POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fileName));
     
    			HSSFWorkbook workbook = new HSSFWorkbook(fs);
     
    			HSSFSheet worksheet = workbook.getSheetAt(month-1);
     
    			// index from 0,0... cell A1 is cell(0,0)
    			HSSFRow currentRow = worksheet.getRow(20);
    			HSSFCell currentCell = currentRow.getCell(1);
     
    			while(it.hasNext()){
    				int day = it.next();
    				for(int i = 20; i < 52;i++){
    					currentRow = worksheet.getRow(i);
    					currentCell = currentRow.getCell(1);
     
    					if(currentCell.getCellType() == Cell.CELL_TYPE_NUMERIC){
    						if(currentCell.getNumericCellValue() == day){
    							double[] schedHour = scheduleOfTheMonth.get(day);
     
    							for(int j = 0; j < 4; j++){
    								currentCell = currentRow.getCell(currentCell.getColumnIndex()+1);
    								if(j == 0 || j == 2){
    									if(schedHour[j] == 0.0 && schedHour[j+1] > 0.0){
    										schedHour[j] = 4.0;
    									}
    								}
    								currentCell.setCellValue(schedHour[j]);
    							}
     
    							if((schedHour[1] == 24.0) || (schedHour[3] == 24.0)){
    								currentCell = currentRow.getCell(currentCell.getColumnIndex()+2);
    								currentCell.setCellValue("X");//marquage de la cellule nuit
    							}						
    						}						
    					}
    				}
    			}
     
    			FileOutputStream fileOut = new FileOutputStream(fileName);
    			workbook.write(fileOut);
    		    fileOut.close();
     
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}

    Merci pour votre aide

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Alors finalement j'ai trouvé

    Solution du problème :
    Il faut tout simplement mettre a jour les cases concernées en utilisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(workbook);
    evaluator.evaluateFormulaCell(currentCell);
    On utilise evaluateFormulaCell(currentCell) pour réévaluer la cellule concernée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Et si jamais je met les info ici, tout est très bien expliqué:
    http://poi.apache.org/spreadsheet/eval.html


    Si qqun, ou un modo pouvait me dire comment (ou tout simplement mettre) la balise [Résolu]

    Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/07/2014, 13h19
  2. problème de mise à jour des tables (10g)
    Par bad lieutenant dans le forum Administration
    Réponses: 7
    Dernier message: 26/04/2007, 17h21
  3. problème de mise à jour des variables
    Par King_T dans le forum Langage
    Réponses: 8
    Dernier message: 26/03/2007, 16h43
  4. Réponses: 6
    Dernier message: 13/07/2006, 12h33
  5. [C#][Access]Problème de mise à jour des données
    Par vvvvv dans le forum ASP.NET
    Réponses: 10
    Dernier message: 11/04/2006, 10h43

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