internal ExcelTemplateDefinition GetTemplateDefinitionFromLink(ExcelTemplateDefinitionPart parent, TemplateLink templateLink) { try { string[] tos = templateLink.To.Split('.'); ExcelInterop.Worksheet sheetContainer = null; string templateName; if (tos.Count() == 1) { sheetContainer = parent.DefinitionCells.Worksheet; templateName = tos[0].EmptyIfNull().Trim(); } else { string worksheetContainerName = tos[0].EmptyIfNull().Trim(); templateName = tos[1].EmptyIfNull().Trim(); ExcelInterop.Worksheet parentWorkSheet = parent.DefinitionCells.Worksheet; ExcelInterop.Workbook workbook = parentWorkSheet.Parent as ExcelInterop.Workbook; if (workbook == null) { throw new EtkException("Cannot retrieve the workbook that owned the template destination sheet"); } List <ExcelInterop.Worksheet> sheets = new List <ExcelInterop.Worksheet>(workbook.Worksheets.Cast <ExcelInterop.Worksheet>()); sheetContainer = sheets.FirstOrDefault(s => !string.IsNullOrEmpty(s.Name) && s.Name.Equals(worksheetContainerName)); if (sheetContainer == null) { throw new EtkException($"Cannot find the sheet '{worksheetContainerName}' in the current workbook", false); } ExcelApplication.ReleaseComObject(workbook); workbook = null; } string templateDescriptionKey = $"{sheetContainer.Name}-{templateName}"; ExcelTemplateDefinition templateDefinition = bindingTemplateManager.GetTemplateDefinition(templateDescriptionKey) as ExcelTemplateDefinition; if (templateDefinition == null) { ExcelInterop.Range range = sheetContainer.Cells.Find(string.Format(TEMPLATE_START_FORMAT, templateName), Type.Missing, ExcelInterop.XlFindLookIn.xlValues, ExcelInterop.XlLookAt.xlPart, ExcelInterop.XlSearchOrder.xlByRows, ExcelInterop.XlSearchDirection.xlNext, false); if (range == null) { throw new EtkException($"Cannot find the template '{templateName.EmptyIfNull()}' in sheet '{sheetContainer.Name.EmptyIfNull()}'"); } templateDefinition = ExcelTemplateDefinitionFactory.CreateInstance(templateName, range); bindingTemplateManager.RegisterTemplateDefinition(templateDefinition); range = null; } ExcelApplication.ReleaseComObject(sheetContainer); sheetContainer = null; return(templateDefinition); } catch (Exception ex) { string message = $"Cannot create the template dataAccessor. {ex.Message}"; throw new EtkException(message, false); } }
public static ExcelBindingDefinitionWithFormula CreateInstance(ExcelTemplateDefinition templateDefinition, BindingDefinitionDescription definition) { try { IBindingDefinition formulaBindingDefinition = null; IBindingDefinition targetBindingDefinition = null; if (!string.IsNullOrEmpty(definition.Formula)) { BindingDefinitionDescription formulaBindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, definition.Formula, definition.Formula); formulaBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, formulaBindingDefinitionDescription); } if (!string.IsNullOrEmpty(definition.BindingExpression)) { string bindingExpression = $"{{{definition.BindingExpression}}}"; BindingDefinitionDescription targetBindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, bindingExpression, bindingExpression); targetBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, targetBindingDefinitionDescription); } ExcelBindingDefinitionWithFormula ret = new ExcelBindingDefinitionWithFormula(definition, targetBindingDefinition, formulaBindingDefinition); return(ret); } catch (Exception ex) { string message = $"Cannot create the 'ExcelBindingDefinitionWithFormula' from '{definition.BindingExpression ?? string.Empty}'. {ex.Message}"; throw new EtkException(message); } }
private ExcelBindingDefinitionButton(BindingDefinitionDescription definitionDescription, ExcelTemplateDefinition templateDefinition, ExcelButtonDefinition definition) : base(definitionDescription) { TemplateDefinition = templateDefinition; Definition = definition; if (!string.IsNullOrEmpty(definition.Label)) { LabelBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, DefinitionDescription); CanNotify = LabelBindingDefinition.CanNotify; } RetrieveOnClickMethod(); RetrieveEnableProperty(); }
private ExcelBindingDefinitionPicture(BindingDefinitionDescription definitionDescription, ExcelTemplateDefinition templateDefinition, ExcelPictureDefinition definition) : base(definitionDescription) { TemplateDefinition = templateDefinition; Definition = definition; if (!string.IsNullOrEmpty(definition.Value)) { ValueBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, DefinitionDescription); if (!ValueBindingDefinition.BindingType.Equals(typeof(bool))) { throw new EtkException("A 'CheckBox' must be bound with RetrieveContextualMethodInfo boolean value"); } CanNotify = ValueBindingDefinition.CanNotify; } }
public TemplateManagementViewModel(ExcelTemplateDefinition templateDefinition) { this.templateDefinition = null; dataAccessorString = null; mainBindingDefinitionString = null; //if (templateDefinition == null) // templateDefinition = new ExcelTemplateDefinition(new TemplateOption()); ////if (partToRenderDefinition.TemplateOption.DataAccessor == null && partToRenderDefinition.TemplateOption.MainBindingDefinition == null) //// TypeToBindWithType = TypeToBindWithMode.None; ////else //// TypeToBindWithType = partToRenderDefinition.TemplateOption.DataAccessor == null ? TypeToBindWithMode.Type : TypeToBindWithMode.Accessor; //this.templateDefinition = templateDefinition; //this.PropertyChanged += OnPropertyChanged; }
public static ExcelBindingDefinitionFormulaResult CreateInstance(ExcelTemplateDefinition templateDefinition, string definition) { try { definition = definition.Replace(FORMULA_RESULT_PREFIX, string.Empty); definition = definition.TrimEnd('}'); //UseFormulaBindingDefinition string[] parts = definition.Split(';'); if (parts.Count() > 2) { throw new ArgumentException($"dataAccessor '{definition}' is invalid."); } string useFormulaDefinition = null; string underlyingDefinition; if (parts.Count() == 1) { underlyingDefinition = $"{{{parts[0].Trim()}}}"; } else { useFormulaDefinition = $"{{{parts[0].Trim()}}}"; underlyingDefinition = $"{{{parts[1].Trim()}}}"; } BindingDefinitionDescription bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, underlyingDefinition, underlyingDefinition); IBindingDefinition underlyingBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, bindingDefinitionDescription); IBindingDefinition useFormulaBindingDefinition = null; if (!string.IsNullOrEmpty(useFormulaDefinition)) { bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, useFormulaDefinition, useFormulaDefinition); useFormulaBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, bindingDefinitionDescription); } ExcelBindingDefinitionFormulaResult ret = new ExcelBindingDefinitionFormulaResult(bindingDefinitionDescription, underlyingBindingDefinition, useFormulaBindingDefinition); return(ret); } catch (Exception ex) { string message = $"Cannot retrieve the formula result binding dataAccessor '{definition.EmptyIfNull()}'. {ex.Message}"; throw new EtkException(message); } }
public static ExcelBindingDefinitionButton CreateInstance(ExcelTemplateDefinition templateDefinition, string definition) { ExcelBindingDefinitionButton ret = null; if (!string.IsNullOrEmpty(definition)) { try { ExcelButtonDefinition excelButtonDefinition = definition.Deserialize <ExcelButtonDefinition>(); BindingDefinitionDescription definitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, excelButtonDefinition.Label, excelButtonDefinition.Label); ret = new ExcelBindingDefinitionButton(definitionDescription, templateDefinition, excelButtonDefinition); } catch (Exception ex) { string message = $"Cannot retrieve the button dataAccessor '{definition.EmptyIfNull()}'. {ex.Message}"; throw new EtkException(message); } } return(ret); }
public static ExcelBindingDefinitionPicture CreateInstance(ExcelTemplateDefinition templateDefinition, string definition) { ExcelBindingDefinitionPicture ret = null; if (!string.IsNullOrEmpty(definition)) { try { //ExcelCheckBoxDefinition excelButtonDefinition = definition.Deserialize<ExcelCheckBoxDefinition>(); //BindingDefinitionDescription definitionDescription = BindingDefinitionDescription.CreateBindingDescription(excelButtonDefinition.Value, excelButtonDefinition.Value); //ret = new ExcelBindingDefinitionCheckBox(definitionDescription, templateDefinition, excelButtonDefinition); } catch (Exception ex) { string message = $"Cannot retrieve the checkbox dataAccessor '{definition.EmptyIfNull()}'. {ex.Message}"; throw new EtkException(message); } } return(ret); }