/// <summary> /// Ajoute les données d'une colonne non liées au Business /// </summary> private string AddInfoColDatas() { string additionalData = String.Empty; XtraInfoCols.ForEach( col => { // Ajouter des cases en fonction de ce qu'on veut ajouter - Attention, cela ne concerne pas les données du métier... switch (col) { case "WORKSHEET_NAME": additionalData += this.separator + WorkSheet; break; // Copier, coller, décommenter et compléter le code suivant - 1 case par colonne supplémentaire.... //case "Nouvelle Colonne" : //additionalData += this.separator + "Donnée de la colonne à ajouter à la ligne"; //break; case "Date_Jour": additionalData += this.separator + DateTime.Now.ToString("MM/dd/yyyy"); break; default: additionalData += this.separator + "Sourcer la donnée dans le plugin !!!"; break; } } ); return(additionalData); }
/// <summary> /// Constructeur de lignes issues d'Excel /// </summary> /// <param name="xlCells">Dictionnaire de cellules Excel</param> /// <param name="topLine">Ligne Excel de début de lecture</param> /// <param name="endLine">Ligne Excel de fin de lecture</param> /// <param name="nzHeaders">Liste des ranges des entêtes de colonne</param> /// <returns>Renvoi la liste des lignes construites</returns> private List <string> BuildLines(Dictionary <Tuple <int, int>, Object> xlCells, int topLine, int endLine, List <ExcelNamedRange> nzHeaders) { List <string> matchedDatas = new List <string>(); StringBuilder rowData = null; ExcelWorksheet ws = nzHeaders[0].Worksheet; // Parcours des lignes de l'onglet Excel for (int numLig = topLine; numLig < endLine; numLig++) { string xlValue; #region Parcours des colonnes de la ligne // Parcours des colonnes Excel taguées par la zone nommée RE_X foreach (ExcelNamedRange namedZone in nzHeaders) { // Récupération de la cellule située en ligne : numLig et en colonne : col RE_X Object xlCel = xlCells.FirstOrDefault(kvp => kvp.Key.Item1 == numLig && kvp.Key.Item2 == namedZone.Start.Column).Value; // Récupération de la valeur de la cellule xlValue = xlCel == null ? String.Empty : String.Format(CultureInfo.CurrentCulture, xlCel.ToString().Trim()); // Si on se situe sur la colonne Building et que la valeur est nulle => on ignore la ligne lue (Règle de gestion) en passant à la suivante if (ws.Cells[namedZone.Name].Text.Trim().StartsWith("Building", StringComparison.Ordinal) && String.IsNullOrEmpty(xlValue)) { if (rowData != null) { rowData = null; } break; } // Recherche du séparateur décimal ',' if (!string.IsNullOrEmpty(xlValue) && xlValue.Contains(',')) { // Conversion des montants avec un séparateur décimal '.' double testRes = Double.NaN; if (double.TryParse(xlValue, NumberStyles.Any, CultureInfo.CurrentCulture, out testRes)) { xlValue = testRes.ToString().Replace(',', '.'); } } // Initialisation du buffer avec la première valeur de la ligne et de la colonne if (rowData == null) { rowData = new StringBuilder(); rowData.Append(xlValue); } else { // Ajoût du séparateur et de la valeur de la colonne au buffer rowData.Append(this.separator.ToString() + xlValue); } } #endregion if (rowData != null && rowData.ToString().Length > 0) { #region Gestion de l'ajout des colonnes non liées au business // SVE - 15/02/2017 - Ajoût des données de colonne(s) informelle(s) if (XtraInfoCols.FirstOrDefault() != null) { rowData.Append(this.AddInfoColDatas()); } #endregion // Ajout de la ligne à la collection de lignes matchedDatas.Add(rowData.ToString()); // Flush du buffer rowData = null; } } return(matchedDatas); }
/// <summary> /// Ajoute des zones nommées de feuille Excel /// </summary> /// <param name="wkb">Classeur Excel</param> private void AddColumnsNames(ExcelWorkbook wkb, out string header) { int cpt = 0; StringBuilder ch = null; string entete; // Parcours de la table de correspondance entre les colonnes d'onglets Excel foreach (DataRow hd in this.mappedCols) { cpt += 1; // Ajoût des zones nommées sur l'onglet 'RE INVESTMENT' this.AddName2Sheet( hd[1].ToString().Trim(), wkb.Worksheets[this.sheetNames[0]], "RE_" + cpt.ToString() ); // Ajoût des zones nommées sur l'onglet 'RE INVESTMENT ON USE' this.AddName2Sheet( hd[2].ToString().Trim(), wkb.Worksheets[this.sheetNames[1]], "RE_" + cpt.ToString() ); // Construction d'une En-tête commune aux onglets - Si l'alias est présent alors il sert d'en-tête aux colonnes if (!String.IsNullOrEmpty(hd["ALIAS_COL"].ToString().Trim())) { entete = hd["ALIAS_COL"].ToString().Trim(); } else { // En-tête - Si l'alias est absent et que les en-têtes sont identiques alors le nom commun sert d'en-tête if (hd["RE_INVESTMENT"].ToString().Contains(hd["RE_OWN_USE"].ToString().Trim())) { entete = hd["RE_OWN_USE"].ToString().Trim(); } else { // En-tête - Si l'alias est absent et que les en-têtes sont différentes alors l'en-tête est la concaténation des 5 premiers caractères de chacunes entete = hd["RE_INVESTMENT"].ToString().Trim().Substring(0, 5).Trim() + "&&" + hd["RE_OWN_USE"].ToString().Trim().Substring(0, 5).Trim(); } } // Initialisation du buffer d'en-tête if (ch == null) { // Ajoût de la première colonne d'en-tête ch = new StringBuilder(); ch.Append(entete); } else { // Ajoût du séparateur et de l'en-tête suivante ch.Append(this.separator.ToString() + entete); } } // SVE - 15/02/2017 - Ajoût de colonne(s) informelle(s) dans le header if (XtraInfoCols != null && xtraInfoCol.Count() > 0) { XtraInfoCols.ForEach( col => ch.Append(this.separator.ToString() + col) ); } header = ch.ToString(); }