public static ExcelTemplateDefinitionPart CreateInstance(ExcelTemplateDefinition excelTemplateDefinition, TemplateDefinitionPartType partType, ExcelInterop.Range firstRange, ExcelInterop.Range lastRange) { ExcelTemplateDefinitionPartFactory factory = new ExcelTemplateDefinitionPartFactory(); return(factory.Execute(excelTemplateDefinition, partType, firstRange, lastRange)); }
/// <summary> Parse the template. Retrieve its components. </summary> private void ParseTemplate(ExcelTemplateDefinition excelTemplateDefinition, ref ExcelInterop.Worksheet worksheet, out ExcelTemplateDefinitionPart header, out ExcelTemplateDefinitionPart body, out ExcelTemplateDefinitionPart footer) { try { header = body = footer = null; int headerSize; int footerSize; RetrieveHeaderAndFooterSize(excelTemplateDefinition.DefinitionFirstCell, excelTemplateDefinition.DefinitionLastCell, excelTemplateDefinition.Orientation, out headerSize, out footerSize); ExcelInterop.Range firstRange = worksheet.Cells[excelTemplateDefinition.DefinitionFirstCell.Row + 1, excelTemplateDefinition.DefinitionFirstCell.Column + 1]; ExcelInterop.Range lastRange = worksheet.Cells[excelTemplateDefinition.DefinitionLastCell.Row, excelTemplateDefinition.DefinitionLastCell.Column - 1]; int width = lastRange.Column - firstRange.Column + 1; int height = lastRange.Row - firstRange.Row + 1; // Header ///////// if (headerSize != 0) { ExcelInterop.Range headerLastRange; if (excelTemplateDefinition.Orientation == Etk.BindingTemplates.Definitions.Templates.Orientation.Horizontal) { headerLastRange = worksheet.Cells[firstRange.Row + height - 1, firstRange.Column + headerSize - 1]; } else { headerLastRange = worksheet.Cells[firstRange.Row + headerSize - 1, lastRange.Column]; } //string name = string.Format("{0}-{1}", excelTemplateDefinition.Name, "Header"); header = ExcelTemplateDefinitionPartFactory.CreateInstance(excelTemplateDefinition, TemplateDefinitionPartType.Header, firstRange, headerLastRange); headerLastRange = null; } // Footer ///////// if (footerSize != 0) { ExcelInterop.Range footerFirstRange; if (excelTemplateDefinition.Orientation == Etk.BindingTemplates.Definitions.Templates.Orientation.Horizontal) { footerFirstRange = worksheet.Cells[lastRange.Row - height + 1, lastRange.Column - footerSize + 1]; } else { footerFirstRange = worksheet.Cells[lastRange.Row - footerSize + 1, firstRange.Column]; } //string name = string.Format("{0}-{1}", excelTemplateDefinition.Name, "Footer"); footer = ExcelTemplateDefinitionPartFactory.CreateInstance(excelTemplateDefinition, TemplateDefinitionPartType.Footer, footerFirstRange, lastRange); footerFirstRange = null; } // Body /////// ExcelInterop.Range bodyFirstRange; ExcelInterop.Range bodyLastRange; if (excelTemplateDefinition.Orientation == Orientation.Horizontal) { bodyFirstRange = worksheet.Cells[firstRange.Row, firstRange.Column + headerSize]; bodyLastRange = worksheet.Cells[lastRange.Row, lastRange.Column - footerSize]; } else { bodyFirstRange = worksheet.Cells[firstRange.Row + headerSize, firstRange.Column]; bodyLastRange = worksheet.Cells[lastRange.Row - footerSize, lastRange.Column]; } body = ExcelTemplateDefinitionPartFactory.CreateInstance(excelTemplateDefinition, TemplateDefinitionPartType.Body, bodyFirstRange, bodyLastRange); bodyFirstRange = bodyLastRange = null; } catch (Exception ex) { throw new EtkException($"The parsing of template '{excelTemplateDefinition.Name}' in sheet '{worksheet.Name.EmptyIfNull()}' failed: {ex.Message}"); } }