Изменение экспорта в Excel

Пример серверного расширения, позволяющего вмешаться в процесс экспорта представления в Excel.

Ссылка на пример на GitHub: ExcelExport.

Пример рассчитан на версию Web-клиента 6.1 или выше.

Перечень необходимых инструментов:

Настраиваем собственные параметры экспорта:

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)
        };
    }
}
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)
        }
1 Регистрируем типы в IoC контейнере.
2 Регистрируем тип ExcelExportExampleService как реализацию интерфейса IExcelExportService в containerBuilder.

Проверка примера

  1. Откройте папку в Web-клиенте Docsvision.

  2. Нажмите кнопку Экспортировать в Excel.

  3. Загрузится документ в формате .xlsx, содержащий выгрузку представления со всеми колонками и выделенными цветом нечетными строками.