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); }
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); }
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); }