Partage
  • Partager sur Facebook
  • Partager sur Twitter

Apache POI java

    5 mai 2021 à 9:27:38

    Bonjour,

    Je développe actuellement en java avec le framework Quarkus sur un projet qui permet de modifier un fichier Excel existant. J’utilise apache POI pour manipuler le fichier Excel. La modification de ce fichier est réalisée pour mettre à jour les données qui sont dans les colonnes. Ces données proviennent d’une base de données. D’autres colonnes sont remplies avec des formules qui réalisent des calcules sur les données intégrées.

    Mon problème est le suivant : Lorsque le programme copier plus de donnée qu’il y en a dans les colonnes du tableau Excel, les données supplémentaires sont intégrées mais les colonnes qui contient les formules ne sont pas étendues. J’ai donc pensé pourvoir copier les formules dans les cellules à ajouter mais sans résultat rien n’est copié et lorsque c’est copié les formules ne sont pas reconnues et donc elles ne sont pas actives.

    J’ajoute en dessous les méthodes que j’ai testé mais sans succès.

    //		@Override
    	public void copieFormuleCellule(Sheet sheet, List<String> listeElementsRecuperesBDD, int derniereColonne) {
    		Row row ;
    		for(int i = sheet.getLastRowNum()+1 ; i<listeDonneesBDDActionsDeclenchees.size()+1; i++) {
    			
    			
    			row = sheet.createRow(i);
    			if(sheet.getRow(i)!= null) {
    				for (int j = 0; j < derniereColonne; j++) {
    					
    					Cell cOld = row.createCell(j); 
    					if(!sheet.getRow(3).getCell(j).getCellFormula().isBlank() || sheet.getRow(3).getCell(j) !=null) {
    						cOld.setCellFormula(sheet.getRow(3).getCell(j).getCellFormula());
    						LOG.info("valeur de la liste " + sheet.getRow(3).getCell(j).getCellFormula());
    					}else {
    						cOld.setCellFormula("null");
    					}
    	
    				}
    		
    					}else {
    						sheet.createRow(i);
    					}
    			
    			
    		conteurLigneAjoute++;
    	
    	
    		}
    	
    	
    		LOG.info("nombre de ligne crees " + conteurLigneAjoute);
    	}
    
    
    public void copieFormuleCellule(Sheet sheet, int derniereColonne) {
    		for(int i = 624 ; i<800; i++) {
    			Row row =  sheet.createRow(i);
    			for (int j = 0; j < derniereColonne; j++) {
    				Cell cell = sheet.getRow(3).getCell(j);  
    				Cell cellRec = row.createCell(j);
    				if (cell!=null) {
    					switch (evaluator.evaluateInCell(cell).getCellTypeEnum()) {
    					case BOOLEAN:
    						LOG.info("valeur formule nouvelle cellule : " + sheet.getRow(3).getCell(j).getBooleanCellValue());
    						cellRec.setCellValue(sheet.getRow(3).getCell(j).getBooleanCellValue());
    						break;
    					case NUMERIC:
    						LOG.info("valeur formule nouvelle cellule : " + sheet.getRow(3).getCell(j).getNumericCellValue());
    						cellRec.setCellValue(sheet.getRow(3).getCell(j).getNumericCellValue());
    						break;
    					case STRING:
    						LOG.info("valeur formule nouvelle cellule : " + sheet.getRow(3).getCell(j).getStringCellValue());
    						cellRec.setCellValue(sheet.getRow(3).getCell(j).getStringCellValue());
    						break;
    					case BLANK:
    						LOG.info("valeur formule nouvelle cellule : blank");
    						cellRec.setCellValue("");
    						break;
    					case ERROR:
    						LOG.info(cellRec.getErrorCellValue());
    						break;
    					case FORMULA:
    						CellValue cellval = evaluator.evaluate(sheet.getRow(3).getCell(j));
    						cellRec.setCellFormula(cellval.getStringValue());
    						LOG.info("valeur formule nouvelle cellule : " + cellval.getStringValue());
    						break;
    					default:
    						break;
    					}   	break;
    				}//fin if
    			
    			}//fin for
    			conteurLigneAjoute++;
    		}//fin for
    		LOG.info("nombre de ligne crees " + conteurLigneAjoute);
    	}
    

    L’objectif est de pouvoir étendre les colonnes qui contiennent les formules à la taille qui correspond aux données qui sont intégrées dans le fichier Excel.

    Si quelqu'un sais comme faire je serais preneur pour des conseils ou explications, je vous remercie par avance. 

    • Partager sur Facebook
    • Partager sur Twitter

    Apache POI java

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown