Изменение экспорта в Excel
Пример серверного расширения, позволяющего вмешаться в процесс экспорта представления в Excel.
Ссылка на пример на GitHub: ExcelExport.
Пример рассчитан на версию Web-клиента 6.1 или выше.
Перечень необходимых инструментов:
-
Microsoft Visual Studio 2022.
Настраиваем собственные параметры экспорта:
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, bool noNullValues = false) (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)
};
}
}
csharp
1 | Описание класса, реализующего свой экспорт в Excel. |
2 | Изменяем цвет нечётных строк. |
3 | Модифицирует документ Excel. |
4 | Меняем фоновый цвет нечётных строк в таблице. |
5 | Получаем строковое значение ячейки таблицы. |
6 | Для ячейки типа DateTime устанавливаем длинный формат. |
7 | Получаем все колонки из грида и сортируем их по параметру Order . |
В методе InializeContainer
серверного расширения зарегистрируйте сервис.
public override void InitializeContainer(ContainerBuilder containerBuilder) (1)
{
containerBuilder.RegisterType<ExcelExportExampleService>()
.As<IExcelExportService>()
.SingleInstance(); (2)
}
vbnet
1 | Регистрируем типы в IoC контейнере. |
2 | Регистрируем тип ExcelExportExampleService как реализацию интерфейса IExcelExportService в containerBuilder . |