public string Run(ExelSheet sheet, int rowNumber, FieldConvertionData convertionData)
        {
            var result = string.Empty;

            foreach (var block in Blocks)
            {
                try
                {
                    if (block.CheckCanExecute(sheet, rowNumber, convertionData))
                    {
                        result += block.Execute(sheet, rowNumber, convertionData);
                        if (block.ReturnAfterExecute)
                        {
                            if (convertionData.MappingNeeded)
                            {
                                return(MappingTable(result, convertionData));
                            }
                            return(result);
                        }
                    }
                }
                catch
                {
                    throw;
                }
            }
            if (convertionData.MappingNeeded)
            {
                return(MappingTable(result, convertionData));
            }
            return(result);
        }
 private string MappingTable(string value, FieldConvertionData convertinoData)
 {
     foreach (var mapping in convertinoData.MappingsTable)
     {
         if (convertinoData.MappingsTable.AbsoluteCoincidence)
         {
             if (value.Trim() == mapping.From.Trim())
             {
                 return(mapping.To);
             }
         }
         else
         {
             var res = CheckMapping(value, convertinoData.MappingsTable);
             if (!string.IsNullOrWhiteSpace(res))
             {
                 return(res);
             }
         }
     }
     return(value);
 }
Esempio n. 3
0
        public string Execute(ExelSheet sheet, int rowNumber, FieldConvertionData convertionData)
        {
            var result      = string.Empty;
            var tempResults = new List <string>()
            {
                ""
            };

            foreach (var function in UsedFunctions)
            {
                var parameters = new Dictionary <string, object>();
                if (convertionData.MappingNeeded)
                {
                    parameters.Add("mappings", convertionData.MappingsTable);
                }

                if (function.Function.SelectedParameter == FunctionParameters.PrewFunction)
                {
                    parameters.Add("string", tempResults.LastOrDefault());
                }
                else if (function.Function.SelectedParameter == FunctionParameters.CellName)
                {
                    if (sheet.MainHeader != null)
                    {
                        var header       = sheet.Rows[sheet.Rows.IndexOf(sheet.MainHeader)].HeaderCells.Select(c => c.Value).ToList();
                        var columnNumber = header.IndexOf(header.Where(s => s.Trim().ToLower() == (function.Function.ColumnName ?? string.Empty).Trim().ToLower()).FirstOrDefault());
                        if (columnNumber >= 0 && sheet.Rows.ElementAt(rowNumber).Cells.Count > columnNumber)
                        {
                            parameters.Add("value", sheet.Rows.ElementAt(rowNumber).Cells.ElementAt(columnNumber));
                        }
                        else
                        {
                            throw new Exception(string.Format("В сетке не найдена колонка '{0}'", function.Function.ColumnName));
                        }
                    }
                }
                else if (function.Function.SelectedParameter == FunctionParameters.CellNumber)
                {
                    if (sheet.Rows.ElementAt(rowNumber).Cells.Count > function.Function.ColumnNumber)
                    {
                        parameters.Add("value", sheet.Rows.ElementAt(rowNumber).Cells.ElementAt(function.Function.ColumnNumber));
                    }
                    else
                    {
                        throw new Exception(string.Format("В сетке не найдена колонка с номером '{0}'", function.Function.ColumnNumber));
                    }
                }
                else
                {
                    parameters.Add("sheet", sheet);
                    parameters.Add("row", rowNumber);
                }
                if (function.Function.SelectedParameter == FunctionParameters.PrewFunction)
                {
                    tempResults[tempResults.IndexOf(tempResults.LastOrDefault())] = function.Function.Function(parameters);
                }
                else
                {
                    tempResults.Add(function.Function.Function(parameters));
                }
            }
            foreach (var res in tempResults)
            {
                result += res;
            }
            return(result);
        }
Esempio n. 4
0
        public bool CheckCanExecute(ExelSheet sheet, int rowNumber, FieldConvertionData convertionData)
        {
            var result = IsAllStartRulesNeeded || StartRules.Count == 0;

            foreach (var rule in StartRules)
            {
                var parameters        = new Dictionary <string, object>();
                var cellResultContent = string.Empty;
                if (convertionData.MappingNeeded)
                {
                    parameters.Add("mappings", convertionData.MappingsTable);
                }
                if (rule.Rule.SelectedParameter == FunctionParameters.CellName)
                {
                    if (sheet.MainHeader != null)
                    {
                        var header = sheet
                                     .Rows[sheet.Rows.IndexOf(sheet.MainHeader)]
                                     .HeaderCells.Select(c => c.Value)
                                     .ToList(); //for IndexOf function call in next statetment
                        var column = header.FirstOrDefault(h => string.Compare(h, rule.Rule.ColumnName) == 0);
                        if (column != null)
                        {
                            var columnNumber = header.IndexOf(column);
                            if (sheet.Rows.ElementAt(rowNumber).Cells.Count > columnNumber)
                            {
                                parameters.Add("value", sheet.Rows.ElementAt(rowNumber).Cells.ElementAt(columnNumber));
                            }
                            else
                            {
                                throw new Exception(string.Format("Колонки с названием '{0}' не существует в данной сетке [0]", rule.Rule.ColumnName));
                            }
                        }
                        else
                        {
                            throw new Exception(string.Format("Колонки с названием '{0}' не существует в данной сетке [1]", rule.Rule.ColumnName));
                        }
                    }
                }
                else if (rule.Rule.SelectedParameter == FunctionParameters.CellNumber)
                {
                    if (sheet.Rows.ElementAt(rowNumber).Cells.Count > rule.Rule.ColumnNumber)
                    {
                        parameters.Add("value", sheet.Rows.ElementAt(rowNumber).Cells.ElementAt(rule.Rule.ColumnNumber));
                    }
                }
                else
                {
                    parameters.Add("sheet", sheet);
                    parameters.Add("row", rowNumber);
                }
                cellResultContent = rule.Rule.Function(parameters);
                bool subResult = rule.ExpectedValues
                                 .Select(s => ((s == null ? string.Empty : s.Value) ?? string.Empty))
                                 .Distinct()
                                 .Any(s => cellResultContent.Like(rule.AbsoluteCoincidence ? s : Tag.ClearStringFromDoubleChars(string.Format("*{0}*", s.Replace(' ', '*')), '*')));
                //bool subResult = false;
                //if (rule.AbsoluteCoincidence)
                //{
                //    subResult = rule.ExpectedValues
                //        .Select(s => (s?.Value ?? string.Empty))
                //        .Distinct()
                //        .Any(s =>
                //                    s == cellResultContent
                //                    //|| string.IsNullOrWhiteSpace(s.Value) == string.IsNullOrWhiteSpace(cellResultContent) == true
                //            );
                //}
                //else
                //{
                //    subResult = rule.ExpectedValues
                //        .Select(s => (s?.Value ?? string.Empty))
                //        .Distinct()
                //        .Any(s => cellResultContent.Like(s));
                //}

                if (IsAllStartRulesNeeded)
                {
                    result &= subResult;
                }
                else
                {
                    result |= subResult;
                }

                if ((!IsAllStartRulesNeeded && result) || (IsAllStartRulesNeeded && !result))
                {
                    return(result);
                }
            }
            return(result);
        }