/* * public void execution(DataSet dt, string date, string[] sheetNames) * { * * //Copie du template et ouverture du fichier * System.IO.File.Copy(template, copie, true); * SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(copie, true); * * //Access the main Workbook part, which contains all references. * WorkbookPart workbookPart = myWorkbook.WorkbookPart; * * if (stylePath != null) * {//Importation des styles contenus dans le fichier de style * //Copie du StyleSheet existant pour ne pas perdre les elements du template * var wsp = workbookPart.WorkbookStylesPart; * Stylesheet ss = wsp.Stylesheet; * // Comme on a fait une copie, on doit supprimer le WorkbookStylePart oiginal * workbookPart.DeletePart(wsp); * // Et on y ajoute le notre * WorkbookStylesPart wbsp = workbookPart.AddNewPart<WorkbookStylesPart>(); * //Importation des styles contenus dans le fichier de style * Interface itf = new Interface(); * itf.lectureFichier(ss, stylePath); * wbsp.Stylesheet = ss; * wbsp.Stylesheet.Save(); * lineStyles = itf.lineStyles; * } * * //WorksheetPart que l'on va copier * WorksheetPart worksheetPart = XcelWin.getWorksheetPartByName(myWorkbook, "Feuil1"); * * //Obtention des conf de graph : modeles, titres, colonnes ... * Dictionary<string, Object> d = new Dictionary<string, Object>(); * if (graphPath != null) * d = Interface.lectureConfGraph(graphPath); * WorksheetPart graphs = XcelWin.getWorksheetPartByName(myWorkbook, "Graphs"); * * //Dimension du plus grand des graphs (pour les placer sans superposition par la suite) * //maxJ pour savoir ou placer les metagraphs par la suite * int maxLi = -1, maxCol = -1; * int maxJ = 0; * try * { XcelWin.maxDimChart(graphs, out maxLi, out maxCol); } * catch (NullReferenceException) * { Console.WriteLine("Aucun graph présent dans la feuille 'graph' \nIgnore toutes les operations relatives aux graphs"); } * * * //Creation de chacunes des feuilles * for (int i = 0; i < dt.Tables.Count; i++) * { * //obtention du nom pour la feuille, si absent : Sheet 1, 2, 3... * string nom = ""; * try { nom = sheetNames[i]; } * catch (Exception) { nom = "Sheet" + (i + 1); } * * WorksheetPart wp = CopySheet(workbookPart, worksheetPart, nom); * * int tab = -1; * foreach (string clef in d.Keys.Where(s => s.Contains("tableau"))) * if (((TableauData)d[clef]).indice == i) * tab = i; * if (tab != -1) * creerTableau(wp, dt.Tables[i], i + 1); * else * creerFeuille(wp, dt.Tables[i]); * * * //Obtention des lignes de données des graphs * d = Interface.razConfGraph(d); * if (indiceGraph != -1) * obtInfosGraphs(dt.Tables[i], d, nom); * int j = 0; * * //Si on a trouvé des graphs lors de l'obtention de leurs tailles * if (maxLi != -1) * { * //Creation des graphs qui ont les clefs de type graph * foreach (string clef in d.Keys.Where(s => s.Contains("graph") && ((ChartData)d[s]).data.Count != 0)) * { * ChartData tmp = (ChartData)d[clef]; * ChartPart y = XcelWin.cloneChart(graphs, tmp.nomModele, i, j, maxLi, maxCol); * if (tmp.colValeurs == "last") * XcelWin.fixChartData(y, nom, tmp.data, headerColumns[dt.Tables[i].Columns.Count - nbColonneConfig - 1], getHeaderCol(tmp.colTitres, dt.Tables[i])); * else * { * try { XcelWin.fixChartData(y, nom, tmp.data, getHeaderCol(tmp.colValeurs, dt.Tables[i]), getHeaderCol(tmp.colTitres, dt.Tables[i])); } * catch (Exception) { Console.WriteLine("Echec de mise à jour des données du graph, verifier le fichier de configuration " + clef); } * } * XcelWin.fixChartTitle(y, tmp.titre + " " + nom); * j++; * } * if (j > maxJ) { maxJ = j; } * } * } * //Si on a trouvé des graphs lors de l'obtention de leurs tailles * if (maxLi != -1) * { * //Creation des metagraphs * WorksheetPart wp2 = XcelWin.addWorksheetPart(myWorkbook, "data"); * ecrireMetaChartData(wp2, d); * int k = 0; * foreach (string key in d.Keys.Where(s => s.Contains("meta"))) * { * MetaChartData tmp = (MetaChartData)d[key]; * try * { * ChartPart cp = XcelWin.cloneChart(graphs, tmp.nomModele, k, maxJ, maxLi, maxCol); * List<string> formules; * if (tmp.transpose) * formules = creaFormuleTranspose(((ChartData)d[tmp.series.First()]).data.Count, tmp.series.Count, tmp.indice); * else * formules = creaFormule(((ChartData)d[tmp.series.First()]).data.Count, tmp.series.Count, tmp.indice); * XcelWin.majMetaChart(cp, formules); * XcelWin.fixChartTitle(cp, tmp.titre); * k++; * } * catch (Exception) { Console.WriteLine("Impossible de copier un graph (verifiez que le graph est présent dans le template avec le bon titre) : " + tmp.nomModele); } * } * * //Cache la feuille de donnée des metagraph * Sheet sData = XcelWin.getSheetByName(workbookPart, "data"); * sData.State = new SheetStateValues(); * sData.State.Value = SheetStateValues.Hidden; * * //suppression des modèles de graphs * List<string> listeModele = new List<string>(); * foreach (string key in d.Keys.Where(s => s.Contains("graph") || s.Contains("meta"))) * { * string nomModele = ""; * try { nomModele = ((ChartData)d[key]).nomModele; } * catch (Exception) { nomModele = ((MetaChartData)d[key]).nomModele; } * if (!listeModele.Contains(nomModele)) * { * listeModele.Add(nomModele); * try { XcelWin.supprChart(graphs, nomModele); } * catch (Exception) { Console.WriteLine("Impossible de supprimer le modèle car introuvable : " + nomModele); } * } * } * } * * {//Ajout de la date sur la page de garde * Cell cell = XcelWin.createTextCell("H", 27, date, 0); * Row r = new Row(); * r.RowIndex = 27; * r.AppendChild(cell); * worksheetPart = XcelWin.getWorksheetPartByName(myWorkbook, "REPORTING"); ; * SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>(); * sheetData.AppendChild(r); * } * //Suppression du worksheetPart qui a servis de modele * workbookPart.DeletePart(XcelWin.getWorksheetPartByName(myWorkbook, "Feuil1")); * XcelWin.getSheetByName(workbookPart, "Feuil1").Remove(); * * //Sauvegarde du workbook et fermeture de l'objet fichier * workbookPart.Workbook.Save(); * myWorkbook.Close(); * * } */ //recupere les lignes de données pour les clefs présentes dans le fichier de conf de graph public void obtInfosGraphs(DataTable dt, Dictionary <string, Object> d, string nom) { int i = 2; foreach (DataRow r in dt.Rows) { if ((string)r.ItemArray[indiceGraph] != "")//Si la colonne de graph n'es pas vide { string[] a = r.ItemArray[indiceGraph].ToString().Split(';'); foreach (string b in a) //Pour chaque element { if (d.Keys.Contains(b)) //si l'element est présent dans le dictionnaire (donc s'il etait présent dans le fichier de conf) { ChartData tmp = (ChartData)d[b]; tmp.data.Add(i); if (b.Contains("serie") && tmp.nomModele == "")//s'il s'agit d'une série (et non d'un graph) { //nomModele conient le titre de colonne ou le nom de la sheet pour le graph //titre contient le nom de feuille pour ecrire les formules dans la feuille data //transposé vaut 1 si on transpose, -1 sinon if (tmp.colValeurs == "last") { //if (tmp.nomModele != "") // tmp.transpose = 1; //else // tmp.transpose = -1; if (tmp.titre != "")// si on veut etre en vrai mode tableau { tmp.nomModele = dt.Columns[dt.Columns.Count - 1].ColumnName; } else { tmp.nomModele = nom; } tmp.colValeurs = headerColumns[dt.Columns.Count - nbColonneConfig - 1]; tmp.colTitres = getHeaderCol(tmp.colTitres, dt); tmp.titre = nom; } else { try { //if (tmp.nomModele != "") // tmp.transpose = 1; //else // tmp.transpose = -1; if (tmp.titre != "")// si on veut etre en vrai mode tableau { tmp.nomModele = tmp.colValeurs; } else { tmp.nomModele = nom; } tmp.colValeurs = getHeaderCol(tmp.colValeurs, dt); tmp.colTitres = getHeaderCol(tmp.colTitres, dt); tmp.titre = nom; } catch (Exception) { Console.WriteLine("Echec de mise à jour des données du graph, verifier le fichier de configuration " + b); } } } d[b] = tmp; } } } i++; } }
public void execution(DataSet dt, string date, string[] sheetNames, bool monoFeuille = false) { if (monoFeuille) { //Copie du template et ouverture du fichier System.IO.File.Copy(template, copie, true); SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(copie, true); //Access the main Workbook part, which contains all references. WorkbookPart workbookPart = myWorkbook.WorkbookPart; WorksheetPart wp = XcelWin.getWorksheetPartByName(myWorkbook, "Feuil1"); creerFeuille2(wp, dt); myWorkbook.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true; myWorkbook.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true; //Sauvegarde du workbook et fermeture de l'objet fichier workbookPart.Workbook.Save(); myWorkbook.Close(); } else { //Copie du template et ouverture du fichier System.IO.File.Copy(template, copie, true); SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(copie, true); //Access the main Workbook part, which contains all references. WorkbookPart workbookPart = myWorkbook.WorkbookPart; if (stylePath != null) {//Importation des styles contenus dans le fichier de style //Copie du StyleSheet existant pour ne pas perdre les elements du template var wsp = workbookPart.WorkbookStylesPart; Stylesheet ss = wsp.Stylesheet; // Comme on a fait une copie, on doit supprimer le WorkbookStylePart oiginal workbookPart.DeletePart(wsp); // Et on y ajoute le notre WorkbookStylesPart wbsp = workbookPart.AddNewPart <WorkbookStylesPart>(); //Importation des styles contenus dans le fichier de style Interface itf = new Interface(); itf.lectureFichier(ss, stylePath); wbsp.Stylesheet = ss; wbsp.Stylesheet.Save(); lineStyles = itf.lineStyles; } //WorksheetPart que l'on va copier WorksheetPart worksheetPart = XcelWin.getWorksheetPartByName(myWorkbook, "Feuil1"); //Obtention des conf de graph : modeles, titres, colonnes ... Dictionary <string, Object> d = new Dictionary <string, Object>(); if (graphPath != null) { d = Interface.lectureConfGraph(graphPath); } WorksheetPart graphs = XcelWin.getWorksheetPartByName(myWorkbook, "Graphs"); //Dimension du plus grand des graphs (pour les placer sans superposition par la suite) //maxJ pour savoir ou placer les metagraphs par la suite int maxLi = -1, maxCol = -1; int maxJ = 0; try { XcelWin.maxDimChart(graphs, out maxLi, out maxCol); } catch (NullReferenceException) { Console.WriteLine("Aucun graph présent dans la feuille 'graph' \nIgnore toutes les operations relatives aux graphs"); } //Creation de chacunes des feuilles for (int i = 0; i < dt.Tables.Count; i++) { //obtention du nom pour la feuille, si absent : Sheet 1, 2, 3... string nom = ""; try { nom = sheetNames[i]; } catch (Exception) { nom = "Sheet" + (i + 1); } WorksheetPart wp = CopySheet(workbookPart, worksheetPart, nom); int tab = -1; foreach (string clef in d.Keys.Where(s => s.Contains("tableau"))) { if (((TableauData)d[clef]).indice == i) { tab = i; } } if (tab != -1) { creerTableau(wp, dt.Tables[i], i + 1); } else { creerFeuille(wp, dt.Tables[i]); } //Obtention des lignes de données des graphs d = Interface.razConfGraph(d); if (indiceGraph != -1) { obtInfosGraphs(dt.Tables[i], d, nom); } int j = 0; //Si on a trouvé des graphs lors de l'obtention de leurs tailles if (maxLi != -1) { //Creation des graphs qui ont les clefs de type graph foreach (string clef in d.Keys.Where(s => s.Contains("graph") && ((ChartData)d[s]).data.Count != 0)) { ChartData tmp = (ChartData)d[clef]; ChartPart y = XcelWin.cloneChart(graphs, tmp.nomModele, i, j, maxLi, maxCol); if (tmp.colValeurs == "last") { XcelWin.fixChartData(y, nom, tmp.data, headerColumns[dt.Tables[i].Columns.Count - nbColonneConfig - 1], getHeaderCol(tmp.colTitres, dt.Tables[i])); } else { try { XcelWin.fixChartData(y, nom, tmp.data, getHeaderCol(tmp.colValeurs, dt.Tables[i]), getHeaderCol(tmp.colTitres, dt.Tables[i])); } catch (Exception) { Console.WriteLine("Echec de mise à jour des données du graph, verifier le fichier de configuration " + clef); } } XcelWin.fixChartTitle(y, tmp.titre + " " + nom); j++; } if (j > maxJ) { maxJ = j; } } } //Si on a trouvé des graphs lors de l'obtention de leurs tailles if (maxLi != -1) { //Creation des metagraphs WorksheetPart wp2 = XcelWin.addWorksheetPart(myWorkbook, "data"); ecrireMetaChartData(wp2, d); int k = 0; foreach (string key in d.Keys.Where(s => s.Contains("meta"))) { MetaChartData tmp = (MetaChartData)d[key]; try { ChartPart cp = XcelWin.cloneChart(graphs, tmp.nomModele, k, maxJ, maxLi, maxCol); List <string> formules; if (tmp.transpose) { formules = creaFormuleTranspose(((ChartData)d[tmp.series.First()]).data.Count, tmp.series.Count, tmp.indice); } else { formules = creaFormule(((ChartData)d[tmp.series.First()]).data.Count, tmp.series.Count, tmp.indice); } XcelWin.majMetaChart(cp, formules); XcelWin.fixChartTitle(cp, tmp.titre); k++; } catch (Exception) { Console.WriteLine("Impossible de copier un graph (verifiez que le graph est présent dans le template avec le bon titre) : " + tmp.nomModele); } } //Cache la feuille de donnée des metagraph Sheet sData = XcelWin.getSheetByName(workbookPart, "data"); sData.State = new SheetStateValues(); sData.State.Value = SheetStateValues.Hidden; //suppression des modèles de graphs List <string> listeModele = new List <string>(); foreach (string key in d.Keys.Where(s => s.Contains("graph") || s.Contains("meta"))) { string nomModele = ""; try { nomModele = ((ChartData)d[key]).nomModele; } catch (Exception) { nomModele = ((MetaChartData)d[key]).nomModele; } if (!listeModele.Contains(nomModele)) { listeModele.Add(nomModele); try { XcelWin.supprChart(graphs, nomModele); } catch (Exception) { Console.WriteLine("Impossible de supprimer le modèle car introuvable : " + nomModele); } } } } try {//Ajout de la date sur la page de garde Cell cell = XcelWin.createTextCell("H", 27, date, 0); Row r = new Row(); r.RowIndex = 27; r.AppendChild(cell); worksheetPart = XcelWin.getWorksheetPartByName(myWorkbook, "REPORTING");; SheetData sheetData = worksheetPart.Worksheet.GetFirstChild <SheetData>(); sheetData.AppendChild(r); } catch (Exception) { Console.WriteLine("Erreur lors de l'ajout de la date sur la page de garde 'REPORTING'"); } //Suppression du worksheetPart qui a servis de modele workbookPart.DeletePart(XcelWin.getWorksheetPartByName(myWorkbook, "Feuil1")); XcelWin.getSheetByName(workbookPart, "Feuil1").Remove(); //Sauvegarde du workbook et fermeture de l'objet fichier workbookPart.Workbook.Save(); myWorkbook.Close(); } }