/// <summary> /// Initializes a new instance of the <see cref="CellContext"/> struct. /// </summary> /// <param name="columnContext">ColumnContext for this cell.</param> /// <param name="cellMetadata">Cell metadata.</param> /// <param name="cell">OpenXml cell.</param> public CellContext(ColumnContext columnContext, IExcelMetadata?cellMetadata, Cell cell) { columnContext.AssertArgumentNotNull(nameof(columnContext)); ColumnContext = columnContext; CellMetadata = cellMetadata; Cell = cell; }
private Cell ConstructHeaderCell(ColumnContext columnContext) { Cell headerCell = CreateCell(columnContext.PropertyRenderer.TargetName, CellValues.String); var propertyRenderer = columnContext.PropertyRenderer; ExcelColumnMetadata?excelColumnMetadata = propertyRenderer.GetMetadata <ExcelColumnMetadata>(); // External customization var customizeFunc = excelColumnMetadata?.GetValue(ExcelColumnMetadata.ConfigureHeaderCell); if (customizeFunc != null) { customizeFunc.Invoke(new CellContext(columnContext, excelColumnMetadata !, headerCell)); } return(headerCell); }
private CellContext ConstructCell(ColumnContext columnContext, IPropertyContainer source, bool callCustomize = true) { var propertyRenderer = columnContext.PropertyRenderer; // Render value string?textValue = propertyRenderer.Render(source); textValue = textValue != null?_settings.StringProvider.GetString(textValue) : null; var cellMetadata = propertyRenderer.GetMetadata <ExcelCellMetadata>(); CellValues dataType = ExcelMetadata.DataType.GetFirstDefinedValue( cellMetadata, columnContext.ColumnMetadata, columnContext.SheetMetadata, columnContext.DocumentMetadata); Cell cell = CreateCell(textValue, dataType); if (dataType == CellValues.Date && cell.StyleIndex == null) { cell.StyleIndex = _documentContext.GetCellFormatIndex("Date"); var isLocalTime = propertyRenderer.PropertyType == typeof(LocalTime) || propertyRenderer.PropertyType == typeof(LocalTime?); if (isLocalTime) { cell.StyleIndex = _documentContext.GetCellFormatIndex("Time"); } } CellContext cellContext = new CellContext(columnContext, cellMetadata, cell); // External customization if (callCustomize) { var customizeFunc = cellMetadata?.GetValue(ExcelCellMetadata.ConfigureCell); customizeFunc?.Invoke(cellContext); } // TODO: omit empty cells? or omit style if cell is empty // Example of empty cell: <x:c r="N10052" s="2" /> return(cellContext); }