Изменение экспорта в Excel
Пример серверного расширения, позволяющего вмешаться в процесс экспорта представления в Excel.
namespace ExcelExportServerExtension
{
public class ExcelExportServerExtension : WebClientExtension (1)
{
private readonly IServiceProvider _serviceProvider;
public ExcelExportServerExtension(IServiceProvider serviceProvider) (2)
: base(serviceProvider)
{
this._serviceProvider = serviceProvider;
}
#region Свойства
public override string ExtensionName => Assembly.GetAssembly(typeof(ExcelExportServerExtension)).GetName().Name; (3)
public override Version ExtensionVersion => new Version(FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion); (4)
#endregion Свойства
#region Обработчики событий
public override void InitializeContainer(ContainerBuilder containerBuilder) (5)
{
containerBuilder.RegisterType<ExcelExportExampleService>()
.As<IExcelExportService>()
.SingleInstance(); (6)
}
#endregion Обработчики событий
}
}
1 | Задаём описание расширения для WebClient, которое задано в текущей сборке. |
2 | Создаём новый экземпляр класса. |
3 | Получаем название расширения. |
4 | Получаем версию расширения. |
5 | Регистрируем типы в IoC контейнере. |
6 | Регистрируем тип ExcelExportExampleService как реализацию интерфейса IExcelExportService в containerBuilder . |
Затем настраиваем собственные параметры экспорта:
namespace ExcelExportServerExtension.ExcelExport (1)
{
public class ExcelExportExampleService : ExcelExportService
{
private readonly Color oddRowColor = Color.LightBlue; (2)
protected override void ApplyWorkbookSettings(XLWorkbook workbook) (3)
{
foreach (var worksheet in workbook.Worksheets)
{
for (var i = 1; i < worksheet.RangeUsed().RowCount(); i += 2) (4)
{
var row = worksheet.RangeUsed().Row(i);
row.Style.Fill.BackgroundColor = XLColor.FromColor(oddRowColor);
}
}
}
protected override string GetGridRowParamValueAsString(object paramValue) (5)
{
if (paramValue is DateTime dateTime) (6)
{
return dateTime.ToLongDateString();
}
return base.GetGridRowParamValueAsString(paramValue);
}
protected override IEnumerable<GridColumn> GetGridColumns(GridViewModel viewModel) =>
viewModel.Columns.Select(gridColumn => CreateGridColumnModel(gridColumn, viewModel))
.OrderBy(column => column.UserColumn?.Order ?? 0)
.Select(column => column.GridColumn); (7)
private static GridColumnModel CreateGridColumnModel(GridColumn gridColumn, GridViewModel viewModel) => new GridColumnModel
{
GridColumn = gridColumn,
UserColumn = viewModel.GridUserSettings
.GetColumnsForCurrentPresentation()
.FirstOrDefault(x => x.Name == gridColumn.Name)
};
}
}
1 | Описание класса, реализующего свой экспорт в Excel. |
2 | Изменяем цвет нечётных строк. |
3 | Модифицирует документ Excel. |
4 | Меняем фоновый цвет нечётных строк в таблице. |
5 | Получаем строковое значение ячейки таблицы. |
6 | Для ячейки типа DateTime устанавливаем длинный формат. |
7 | Получаем все колонки из грида и сортируем их по параметру Order . |