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] Erreur "Unexpected missing row when some rows already present"


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut [POI] Erreur "Unexpected missing row when some rows already present"
    Bonjour à tous,

    Je me suis rendu compte que j'ai développé sur Poi pour rien... enfin a vous de me dire....

    J'ai un bug qui apparemment n'est pas résolu avec la version 3.7 et 3.8beta5 à ce jour.

    En effet, j'ai ce message d'erreur-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Exception in thread "main" java.lang.RuntimeException: Unexpected missing row when some rows already present
    	at org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:168)
    	at org.apache.poi.hssf.usermodel.HSSFSheet.<init>(HSSFSheet.java:115)
    	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:299)
    	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:250)
    	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:194)
    	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:329)
    	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:310)
    	at Extraction.main(Extraction.java:93)
    Lorsque j'execute ce programme (l'erreur provient de la ligne en gras):
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Iterator;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    
    public class TrouveeDateDsFichier {
    
    	
    	public static void main(String[] args) {
    		
    		try {
    		HSSFWorkbook wbd;
    		InputStream istr;
    		HSSFSheet sheetd;
    		HSSFRow rowd;
    		HSSFCell celld;
    		String date_extract="25/01/2012";
    		DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    		java.util.Date datextract;
    		Calendar calendar = Calendar.getInstance();
    		int semaine = 0;
    		
    		//faire une vérification pour savoir:
    		//si la date du fichier n'est pas trouvée sur
    		istr = new FileInputStream("C:/Donnees/Aide_Manager/date_extract1.xls");
    		//ce fichier permettra de récupérer les dates pour savoir si un extract à déjà été utilisé.
    		wbd = new HSSFWorkbook(istr);		sheetd = wbd.getSheetAt(0);
    		rowd = null;
    		celld = null;
    		boolean date_stockee_trouvee = false;
    		int dernLigneTrouvee = 0;
    		for (Iterator r = sheetd.rowIterator(); r.hasNext();){
    			rowd = (HSSFRow) r.next();
    			celld = rowd.getCell(0);
    			//System.out.println("lalalalalala");
    			if(celld != null ){
    				if(celld.getCellType()==0){
    				System.out.println("c'est un nombre: "+celld.getNumericCellValue());
    				}else{
    					System.out.println("c'est une chaine: "+celld.getStringCellValue());
    					if(celld.getStringCellValue().equals(date_extract)){// si on trouve que la date_extract est = à la date trouvée dans le fichier
    						System.out.println("DATE TROUVEE Ds le fichier !");
    						System.out.println("CETTE EXTRACT A DEJA ETE UTILISEE !!");
    						System.out.println("MERCI D'UTILISER UN AUTRE EXTRACT CONCERNANT UNE AUTRE DATE !");
    						date_stockee_trouvee=true;
    					}
    				}
    				dernLigneTrouvee = rowd.getCell(0).getRowIndex();
    			}
    		}
    		dernLigneTrouvee++;
    		System.out.println("dernLigneTrouvee: "+dernLigneTrouvee);
    		//si la date n'est pas trouvée dans le fichier
    		System.out.println("date_stockee_trouvee: "+date_stockee_trouvee);
    		if(date_stockee_trouvee==false){
    			//retrouver la dernière ligne du fichier pour y ecrire la date
    				System.out.println("retrouver la dernière ligne du fichier: "+dernLigneTrouvee);
    				//pour crée la date ds le fichier 
    				//et pour la retrouver et eviter de rajouter la validation d'un extract comportant la même date
    				rowd.setRowNum(dernLigneTrouvee);
    				sheetd.createRow(0);
    				celld = rowd.createCell(0);
    			    celld.setCellValue(date_extract);
    			    System.out.println("La nouvelle date_extract '"+date_extract+"' a été stocké dans le fichier.");
    			    //pour ecrire dans le même fichier
    				FileOutputStream fileOutd = new FileOutputStream("C:/Donnees/Aide_Manager/date_extract1.xls");
    				wbd.write(fileOutd);
    			    fileOutd.close();
    			
    		// Date actuelle
    		datextract = formatter.parse(date_extract);
    		calendar.setTime(datextract);
    		semaine = calendar.get(Calendar.WEEK_OF_YEAR);//récupérer la semaine dans l'année pour faire la comparaison avec les onglet du fichier de destination
    		//System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));
    		}
    
    	
    	} catch (FileNotFoundException e){
    		e.printStackTrace();
    	} catch (IOException e) {
    		e.printStackTrace();
    	} catch (ParseException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    	}
    }
    le bug est référencé ici:
    https://issues.apache.org/bugzilla/s...g.cgi?id=49312

    et puis, j'ai constaté ce post qui date de 2006:
    http://www.developpez.net/forums/d25...poi-vs-jexcel/

    Trés intéressant aussi car il indique que JexcelApi consomme moins mémoire que poi.

    Si quelqu'un a une idée sur ce bug, j'attend vos post.
    Sinon je pense que je vais tout refaire avec JExcel.

  2. #2
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Finalement, j'ai réussi à contourner le problème avec ceci:
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    //###################### ON RECUPERE TOUTES LES DATES DU FICHIER DE SAUVEGARDE DES DATES D'EXTRACT #################################################################
    			InputStream is1 = new FileInputStream("C:/Donnees/Aide_Manager/dateTrouvee.xls");
    			//ce fichier permettra de récupérer les dates pour savoir si un extract à déjà été utilisé.
    			HSSFWorkbook wb1 = new HSSFWorkbook(is1);
    			HSSFSheet sheet1 = wb1.getSheetAt(0);
    			HSSFRow row1 = null;
    			HSSFCell cell1 = null;
    			System.out.println("ON RECUPERE TOUTES LES DATES DU FICHIERS");
    			for (Iterator ro = sheet1.rowIterator(); ro.hasNext();){
    				row1 = (HSSFRow) ro.next();//pour chaque ligne du fichier
    				cell1 = row1.getCell(0);// à la colonne 0
    				//si on trouve une chaine
    				if(cell1.getCellType()==1){
    					RecupDate[i]=cell1.getStringCellValue();
    					System.out.println("Date: "+i+" "+RecupDate[i]);
    				}
    				i++;
    			}
    			dernLigneTrouvee=i;
    			System.out.println("dernLigneTrouvee: "+dernLigneTrouvee);
     
    			//####################### ON RECUPERE LA DATE DE L'EXTRACT ################################################################			
    			//faire une vérification pour savoir:
    			//si la date du fichier n'est pas trouvée sur
    			InputStream is2 = new FileInputStream("C:/Donnees/Aide_Manager/extract_25012012.xls");
    			//ce fichier permettra de récupérer les dates pour savoir si un extract à déjà été utilisé.
    			HSSFWorkbook wb2 = new HSSFWorkbook(is2);
    			HSSFSheet sheet2 = wb2.getSheetAt(0);
    			HSSFRow row2 = null;
    			HSSFCell cell2 = null;
    			int j=0;
    			for (Iterator r = sheet2.rowIterator(); r.hasNext();){
    				row2 = (HSSFRow) r.next();
    				cell2 = row2.getCell(0);
    				if(row2.getRowNum() == 6){
    					dateTrouvee = row2.getCell(0).getStringCellValue().substring(3,13);//on récupère la date
    						System.out.println("on récupère la date de l'extract: "+dateTrouvee);
    					}
    			}
    			//####################### COMPARAISON DES DATES ################################################################
    			for(int m=0; m<RecupDate.length;m++){
    				if(RecupDate[m]!=null){
    				if(dateTrouvee.equals(RecupDate[m])){
    					System.out.println("dateTrouvee: "+dateTrouvee);
    					System.out.println("RecupDate[i]: "+RecupDate[m]);
    					System.out.println("DATE TROUVEE: ON ECRIT PAS DANS LE FICHIER.");
    					date_stockee_trouvee=true;//true pour dire que la date est trouvée
    				}
    				}
    			}
    			//####################### On écrit ################################################################	
    			InputStream is3 = new FileInputStream("C:/Donnees/Aide_Manager/dateTrouvee.xls");
    			HSSFWorkbook wb3 = new HSSFWorkbook(is3);
    			HSSFSheet sheet3 = wb3.getSheetAt(0);
     
    			if(date_stockee_trouvee==false){//false pour dire que la date n'est pas trouvée
    				HSSFRow row3 = sheet3.createRow(dernLigneTrouvee);
    				HSSFCell cell3 = row3.createCell(0);
    				System.out.println("---------------On ecrit la date si on la trouve pas-------------------");
    				cell3 = row3.createCell(0);//on fixe la colonne
    				cell3.setCellValue(dateTrouvee);
    				System.out.println("La nouvelle date_extract '"+dateTrouvee+"' a été stocké dans le fichier.");
    				//pour ecrire dans le même fichier
    				FileOutputStream fileOutd = new FileOutputStream("C:/Donnees/Aide_Manager/dateTrouvee.xls");
    				wb3.write(fileOutd);
    				fileOutd.close();
    			}

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

Discussions similaires

  1. Unexpected missing row when some rows already present
    Par mouss4rs dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 01/03/2012, 11h30
  2. Réponses: 3
    Dernier message: 01/03/2012, 10h47
  3. Réponses: 10
    Dernier message: 27/01/2007, 13h54
  4. [Eclipse / Jonas] Erreur "jonas-entity missing for bean"
    Par citygirl dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 16/05/2005, 11h59

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