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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322
|
package Action;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.Collator;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.Locale;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFDataFormat;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import Modele.Agent;
public class ActionAlimenter implements Action {
@Override
public String traiter(HttpServletRequest req, HttpServletResponse rep) {
String file1 = req.getParameter("parcourir1");//on récupère le chemin de l'extract
String dest1 = "Projection_2012_Eq2.xlsx"; // fichier ou on va écrire
ServletContext servletContext = req.getServletContext();
//2. avoir plus tard
String file2 = req.getParameter("parcourir2");
String dest2 = "Quimper2_AS_OE_1erT 2012.xlsx";
String mot = "toto";
ArrayList<Agent> listAgent = new ArrayList<Agent>();
String tab[][] = new String [100][100];
int tabvalidation[][] = new int [100][100];
String ag;
int va;
String sub;
int isub;
String onglet;
int onglet_conv;
int semaine = 0;
String semaine_en_string;
// Variables
String prenom_agent = null; //pour récupérer les Agents
int valid = 0; // pour récupérer le nombre de validation
int n_l_valid = 0; // pour récupérer la ligne de chaque validation
HSSFCell valid_recupere = null;// pour récupérer les valeurs des validations
java.util.Date datextract;
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String date_extract;
Calendar calendar = Calendar.getInstance();
try {
InputStream is = new FileInputStream(file1);//pour ouvrir les fichiers xlsx de 2007
//POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("extract.xls")); //pour ouvrir les fichiers xls
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = null;
HSSFCell cell = null;
int n = 0;
int i = 0;//compte le nombre d'agent
for (Iterator rowIt = sheet.rowIterator(); rowIt.hasNext();){
row = (HSSFRow) rowIt.next();
Agent a = new Agent();
n++;// pour avoir le numéro de chaque ligne lue
if(row.getRowNum() == 6 && row.getCell(0) != null){//pour obtenir la date de l'extract et déterminer sa semaine dans l'année.
date_extract = row.getCell(0).getStringCellValue().substring(3,13);
//System.out.println("date_extract: "+date_extract);
// 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));
}
if(row.getCell(0) != null && row.getCell(0).getStringCellValue().startsWith("Agent")){//si les lignes de la colonne 0 ne sont pas null
prenom_agent=row.getCell(0).getStringCellValue();//on récupère notre agent
//isub = nom_agent.indexOf(",");
sub = prenom_agent.substring(prenom_agent.indexOf(",")+1).trim();//récupérer la chaine après la virgule, après l'espace mais sans l'espace à la fin
//System.out.println(sub);
a.setAgent(sub);//on récupère notre agent dans notre objet
//System.out.println(a.getAgent()); //on l'affiche
}
if(row.getCell(1) != null && row.getCell(1).getStringCellValue().startsWith("Validation")){// si les lignes de la colonne 2 ne sont pas null
valid++; //Nombre de validation détecter dans le fichier
n_l_valid = n; // on récupère le numéro de ligne de la Validation
//System.out.println(nom_agent);
n_l_valid--;//on décrémente pour récupérer la validation dans le fichier
//valid_recupere=sheet.getRow(n_l_valid).getCell(4);// on récupére la validation dans le fichier
//System.out.println("Validation: "+valid_recupere);//on l'affiche
a.setValidation((int)sheet.getRow(n_l_valid).getCell(4).getNumericCellValue());//on récupère notre agent dans notre objet sous forme d'entier
//System.out.println("validation: "+a.getValidation());//on l'affiche
}
listAgent.add(a);
}//fin du for
int k = 0;//pour passer à la colonne suivante
for (Agent agt : listAgent){
if(agt.getAgent()!=null){//si l'agent n'est pas null
ag=agt.getAgent().toUpperCase();//obtenir L'agent
tab[0][k]=ag;
//System.out.println("k: "+k);
}
if(agt.getValidation()!=0){//si la validation n'est pas null
va=agt.getValidation();//obtenir la validation
tabvalidation[1][k]=va;//assigner les 2 valeurs trouvées
k++;//passe à la colonne suivante
}
}
int nbfeuille=0;
int ligne_trouvee;
//version .xlsx
InputStream ist = new FileInputStream("Projection_2012_Eq2.xlsx");
OPCPackage opc=OPCPackage.open(ist);//version .xlsx
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(); //version .xlsx
//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"));
//cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));//version .xls
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.0%"));
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
}
}
}
}
}
}
//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(fmt.getFormat("#,##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(fmt.getFormat("#,##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(fmt.getFormat("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(fmt.getFormat("0.00"));
cell2.setCellStyle(cellStyle);
}
}
}//for
//pour ecrire dans le même fichier
FileOutputStream fileOut = new FileOutputStream(dest1);
wb2.write(fileOut);
fileOut.close();
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(file1!=null)
req.getSession().setAttribute("message1"," le fichier "+file1+" a bien été extrait vers "+dest1+".");
if(file2!=null)
req.getSession().setAttribute("message2"," le fichier "+file2+" a bien été extrait vers "+dest2+".");
String filePath = servletContext.getRealPath ("Projection_2012_Eq2.xlsx");
req.getSession().setAttribute("filePath","filePath: "+filePath+" .");
//req.getSession().setAttribute("agents","date_extract: "+date_ext+"<br>");
req.getSession().setAttribute("toto","toto"+mot);
//req.setAttribute("onglet_conv","onglet de la semaine "+onglet_conv+" TROUVEE !"+"<br>");
return "Read_write.jsp";
}
} |
Partager