Пример #1
0
        /*
         * 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++;
            }
        }
Пример #2
0
        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();
            }
        }