Hello every body,

I have this error:
org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should
contain a content type part [M1.13]
        at
org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:147)
        at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:592)
        at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:222)
        at Extraction.main(Extraction.java:155)

The ligne 155 is in bold:
int nbfeuille=0;
                                int ligne_trouvee;
                                //version .xls
                                /*InputStream ist = new
FileInputStream("C:/Users/LZ2059/Desktop/Projection_2012_Eq2.xls"); //pour
ouvrir les fichiers xls de 2007
                                HSSFWorkbook wb2 = new HSSFWorkbook(ist);
                                HSSFSheet sheet2 = wb2.getSheetAt(0);
                                nbfeuille= wb2.getNumberOfSheets();//retourne 
le nombre de feuille
renseigné
                                HSSFRow row2 = null;
                                HSSFCell cell2 = null;
                                HSSFCellStyle cellStyle = null;*/
                                
                                //version .xlsx
                                InputStream ist = new
FileInputStream("C:/Users/LZ2059/Desktop/Projection_2012_Eq2.xlsx");
                                *OPCPackage opc=OPCPackage.open(ist);*          
            XSSFWorkbook wb2= new
XSSFWorkbook(opc); 
                                XSSFSheet sheet2 = wb2.getSheetAt(0);//onglet 0
                                nbfeuille= wb2.getNumberOfSheets();//retourne 
le nombre de feuille
renseigné
                                XSSFRow row2 = null;
                                XSSFCell cell2 = null;
                                XSSFCellStyle cellStyle = null;
                                XSSFDataFormat fmt = wb2.createDataFormat(); 
                                //pour ouvrir un .xlsx
                            FormulaEvaluator evaluator =
wb2.getCreationHelper().createFormulaEvaluator();
                            evaluator.evaluate(cell2);
                                
                                String prenom_proj;
                                Collator usCollator;
                                System.out.println("wb2.getNumberOfNames(): 
"+nbfeuille);
                                // il faut définir la feuille qui sera alimenté:
                                //Parcourir les feuilles du document
                                //si la semaine correspond au libellé d'une 
feuille
                                for (int g=0; g<nbfeuille; g++){//boucle de 
parcours des onglets
                                        sheet2 = wb2.getSheetAt(g);
                                        onglet=sheet2.getSheetName();// on 
récupère le nom de la feuille excel
en String
                                        if(onglet.startsWith("S")){//si ca 
commence par "S"
                                                //on enleve le "S"
                                                
semaine_en_string=onglet.substring(1);
                                                // on converti le nom de 
l'onglet en Int
                                                onglet_conv = 
Integer.parseInt(semaine_en_string);
                                                System.out.println("onglet: 
"+onglet_conv);
                                                if(onglet_conv == semaine){//si 
la semaine de l'onglet du doc
"extract.xls"
                                                                                
                        //correspond à la semaine de l'année trouver dans le 
fichier
"Projection_2012_Eq2.xls"
                                                
                                                        
System.out.println("onglet de la semaine "+onglet_conv+" TROUVEE !");
                                                        for (Iterator rowIt = 
sheet2.rowIterator();
rowIt.hasNext();){//boucle de parcours du fichier de ligne en ligne
                                                                row2 = 
(XSSFRow) rowIt.next();
                                                                
if(row2.getCell(0)!= null && row2.getRowNum() <= 19){// si la ligne
est différent de null et inférieur ou égale à la 20ème ligne
                                                                        
if(!row2.getCell(0).getStringCellValue().equals("Noms") &&
!row2.getCell(0).getStringCellValue().equals("EQUIPE") &&
!row2.getCell(0).getStringCellValue().equals("")){
                                                                                
//on récupère le 1er prénom du fichier Projection
                                                                                
prenom_proj=row2.getCell(0).getStringCellValue().toUpperCase();
                                                                        
                                                                                
for (int d=0; d<tab.length;d++){
                                                                                
        if(tab[0][d] != null || tab[1][d]!=null){//si l'une des cellules
n'est pas null
                                                                                
                //System.out.println("Tab"+tab[0][d]);
                                                                                
                //System.out.println("prénom: "+prenom_proj);
                                                                                
                
                                                                                
                //Get the Collator for US English and set its strength to
PRIMARY
                                                                                
                 usCollator = Collator.getInstance(Locale.FRANCE);
                                                                                
                 usCollator.setStrength(Collator.PRIMARY);
                                                                                
                 if( usCollator.compare(prenom_proj, tab[0][d]) == 0 ){//si le
prénom trouvé dans le fichier 'Projection_2012_Eq2.xlsx' correspond au
prenom de l'extract Hermes
                                                                                
                     //System.out.println("Strings are equivalent");
                                                                                
                     System.out.println("Agent: "+tab[0][d]+" Validation:
"+tabvalidation[1][d]);
                                                                                
                     //on récupère la ligne du prénom
                                                                                
                     ligne_trouvee= row2.getCell(0).getRowIndex();
                                                                                
                     ligne_trouvee++;//pour écrire dans la bonne ligne
                                                                                
                     //System.out.println("ligne TROUVEE: "+ligne_trouvee);
                                                                                
                        //on écrit dans la colonne I la validation du prénom
trouvé
                                                                                
                        cell2 = row2.getCell(8);// colonne(I)
                                                                                
                                cell2 = row2.createCell(8);
                                                                                
                            cell2.setCellType(Cell.CELL_TYPE_NUMERIC);
                                                                                
                            cell2.setCellValue(tabvalidation[1][d]);
                                                                                
                            
                                                                                
                            //on ré-écrit la formule pour la colonne J
                                                                                
                            cell2 = row2.getCell(9);// colonne(J)
                                                                                
                                cell2 = row2.createCell(9);
                                                                                
                                
cell2.setCellFormula("I"+ligne_trouvee+"/B"+ligne_trouvee);
                                                                                
                                //System.out.println("Formule:
I"+ligne_trouvee+"/B"+ligne_trouvee);
                                                                                
                                //arrondir à 2 chiffre après la virgule
                                                                                
                            cellStyle = wb2.createCellStyle();
                                                                                
                            cellStyle.setDataFormat(fmt.getFormat("#,##0.00"));
                                                                                
                            cell2.setCellStyle(cellStyle);
                                                                                
                                
                                                                                
                                //on ré-écrit la formule pour la colonne K
                                                                                
                            cell2 = row2.getCell(10);// colonne(K)
                                                                                
                                cell2 = row2.createCell(10);
                                                                                
                                
cell2.setCellFormula("I"+ligne_trouvee+"/C"+ligne_trouvee);
                                                                                
                                //arrondir à 2 chiffre après la virgule
                                                                                
                            cellStyle = wb2.createCellStyle();
                                                                                
                            cellStyle.setDataFormat(fmt.getFormat("#,##0.00"));
                                                                                
                            cell2.setCellStyle(cellStyle);
                                                                                
                                
                                                                                
                                //on ré-écrit la formule pour la colonne L
                                                                                
                            cell2 = row2.getCell(11);// colonne(L)
                                                                                
                                cell2 = row2.createCell(11);
                                                                                
                                cell2.setCellFormula("J"+ligne_trouvee+"*7");
                                                                                
                                //System.out.println("Formule: 
J"+ligne_trouvee+"*7");
                                                                                
                                //arrondir à 2 chiffre après la virgule
                                                                                
                            cellStyle = wb2.createCellStyle();
                                                                                
                            cellStyle.setDataFormat(fmt.getFormat("#,##0.00"));
                                                                                
                            cell2.setCellStyle(cellStyle);
                                                                                
                                
                                                                                
                                ligne_trouvee--;//pour retrouver ma ligne
                                                                                
                                // Write the output to a file
                                                                                
                                //pour ecrire dans le même fichier
                                                                                
                            FileOutputStream fileOut = new
FileOutputStream("C:/Users/LZ2059/Desktop/Projection_2012_Eq2.xlsx");
                                                                                
                            wb2.write(fileOut);
                                                                                
                            fileOut.close();
                                                                                
                 }
                                                                                
                
                                                                                
        }
                                                                                
        
                                                                                
}
                                                                        }
                                                                        
                                                                }
                                                        }
                                                        
                                                        //on réécrit la formule 
du total colonne I
                                                        row2.setRowNum(20);
                                                        
//System.out.println("on doit se fixer à la ligne 20:
"+row2.getRowNum());
                                                    cell2 = row2.createCell(8);
                                                    String colonneI = "I3:I20";
                                                    
cell2.setCellFormula("SUM("+colonneI+")");
                                                    //format EQUIPE de la 
colonne I
                                                    cellStyle = 
wb2.createCellStyle();
                                                   
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0"));//format 1
000 par ex.
                                                    
cell2.setCellStyle(cellStyle);
                                                    
                                                    //on réécrit la formule du 
total colonne J
                                                        row2.setRowNum(20);
                                                        
//System.out.println("on doit se fixer à la ligne 20:
"+row2.getRowNum());
                                                    cell2 = 
row2.createCell(9);//colonne J
                                                    String resultatParH = 
"SUM(I3:I20)/SUM(B3:B20)";
                                                    
cell2.setCellFormula(resultatParH);
                                                    //arrondir à 2 chiffre 
après la virgule
                                                    cellStyle = 
wb2.createCellStyle();
                                                   
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
                                                    
cell2.setCellStyle(cellStyle);
                                                    
                                                    //on réécrit la formule du 
total colonne K
                                                        row2.setRowNum(20);
                                                        
//System.out.println("on doit se fixer à la ligne 20:
"+row2.getRowNum());
                                                    cell2 = 
row2.createCell(10);//colonne K
                                                    String txtransfo = 
"(SUM(I3:I20)/SUM(C3:C20))/100";//j'ai rajouté
/100 pour prendre en compte le % dans l'ecriture du format
                                                    
cell2.setCellFormula(txtransfo);
                                                    //arrondir à 2 chiffre 
après la virgule
                                                    cellStyle = 
wb2.createCellStyle();
                                                    
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00%"));
                                                    
cell2.setCellStyle(cellStyle);
                                                    
                                                    //on réécrit la formule du 
total colonne L
                                                        row2.setRowNum(20);
                                                        
//System.out.println("on doit se fixer à la ligne 20:
"+row2.getRowNum());
                                                    cell2 = 
row2.createCell(11);//colonne L
                                                    String resultatetp = 
"J21*7";
                                                    
cell2.setCellFormula(resultatetp);
                                                    //arrondir à 2 chiffre 
après la virgule
                                                    cellStyle = 
wb2.createCellStyle();
                                                    
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
                                                    
cell2.setCellStyle(cellStyle);
                                                    
                                                    //pour ecrire dans le même 
fichier
                                                    FileOutputStream fileOut = 
new
FileOutputStream("C:/Users/LZ2059/Desktop/Projection_2012_Eq2.xlsx");
                                                    wb2.write(fileOut);
                                                    fileOut.close();
                                                    //System.out.println("somme 
colonne I: "+row2.getCell(8).get);
                                        }
                                        
                                        
                                        }
                                
                                }//for  

In fact, I open and I write on the same file.


--
View this message in context: 
http://apache-poi.1045710.n5.nabble.com/Error-Package-should-contain-a-content-type-part-M1-13-tp5508605p5508605.html
Sent from the POI - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to