Выгрузка в Excel

Добрый день!

Планируется ли реализовать выгрузку фильтров, по которым формируются данные, вместе с выгрузкой в Excel?

Нравится

1 комментарий

Для того, чтобы выгрузить записи по условию фильтрации, нужно зайти в группу или вручную настроить фильтр, а затем произвести выгрузку.

 

Если Вы имеете в виду прямо в XLSX-файле выводить информацию о фильтре, то надо дорабатывать логику функции PrepareExport в схеме ExportToExcelService:

/// <summary>
/// Creates and writes excel stream to local storage and return export key.
/// </summary>
/// <param name="esqSerialized">Serialized export esq.</param>
/// <returns><see cref="ExportToExcelResponse"/>.</returns>
public virtual ExportToExcelResponse PrepareExport(string esqSerialized) {
	esqSerialized.CheckArgumentNull("ExportToExcelService.PrepareExport esqSerialized");
	UserConnection.CheckArgumentNull("ExportToExcelService UserConnection");
	UserConnection.DBSecurityEngine.CheckCanExecuteOperation(CanExportGridOperationCode);
	var selectQuery = Json.Deserialize<SelectQuery>(esqSerialized);
	selectQuery.CheckArgumentNull("ExportToExcelService.PrepareExport deserialized SelectQuery");
	var entitySchemaQuery = selectQuery.BuildEsq(UserConnection);
	entitySchemaQuery.CheckArgumentNull("ExportToExcelService.PrepareExport entitySchemaQuery");
	entitySchemaQuery = RemoveBinaryColumnsFromQuery(entitySchemaQuery);
	ExcelConverter.BatchSize = BatchSize;
	var excelData = ExcelConverter.GetExcelData(entitySchemaQuery, UserConnection);
	var storableExcelStream = new StorableStreamEntity { Data = excelData };
	var id = StreamRepository.Create(storableExcelStream);
	return new ExportToExcelResponse {
		Key = id.ToString(),
		Count = ExcelConverter.ExportedRowCount
	};
}

Или, скорее,  вызываемую из неё GetExcelData в схеме ExcelConverter:

/// <summary>
/// Returns excel data by entity schema query.
/// </summary>
/// <param name="entitySchemaQuery">Export data entity schema query.</param>
/// <param name="userConnection">User connection.</param>
/// <returns>Excel data bytes.</returns>
public virtual byte[] GetExcelData(EntitySchemaQuery entitySchemaQuery, UserConnection userConnection) {
	entitySchemaQuery.CheckArgumentNull("ExcelConverter.GetExcelData entitySchemaQuery");
	userConnection.CheckArgumentNull("ExcelConverter.GetExcelData userConnection");
	_isPrimaryColumnSelected = IsPrimaryColumnSelected(entitySchemaQuery);
	if (!_isPrimaryColumnSelected) {
		entitySchemaQuery.PrimaryQueryColumn.IsAlwaysSelect = true;
	}
	using (var excelStream = new MemoryStream()) {
		try {
			var spreadsheetDocument = CreateExcelFile(excelStream, entitySchemaQuery);
			SaveHeader(entitySchemaQuery);
			SaveData(entitySchemaQuery, userConnection);
			CloseExcelFile(spreadsheetDocument);
		} catch (Exception exception) {
			Log.Error($"Error during export to excel {exception}");
			throw new ExportToExcelException(exception);
		}
		return excelStream.ToArray();
	}
}

 Сейчас сериализованный ESQ с фильтром и набором колонок передаётся в первую в текстовом параметре в виде наподобие:

esqSerialized: "{"rootSchemaName":"Opportunity","operationType":0,"includeProcessExecutionData":true,"filters":{"items":{"4d035dfe-121a-4ac7-a729-353f872bf977":{"items":{"FixedFilters":{"items":{},"logicalOperation":0,"isEnabled":true,"filterType":6}},"logicalOperation":0,"isEnabled":true,"filterType":6}},"logicalOperation":0,"isEnabled":true,"filterType":6},"columns":{"items":{"Title":{"caption":"Название","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Title"}},"Mood":{"caption":"Настроение","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Mood"}},"Account":{"caption":"Контрагент","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Account"}},"Contact":{"caption":"Контакт","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Contact"}},"Stage":{"caption":"Стадия","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Stage"}},"Owner":{"caption":"Ответственный","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Owner"}},"Amount":{"caption":"Сумма продажи","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Amount"}}}},"isDistinct":false,"rowCount":-1,"rowsOffset":-1,"isPageable":false,"allColumns":false,"useLocalization":true,"useRecordDeactivation":false,"serverESQCacheParameters":{"cacheLevel":0,"cacheGroup":"","cacheItemName":""},"queryOptimize":false,"useMetrics":false,"querySource":0,"ignoreDisplayValues":false,"isHierarchical":false}"

А во вторую — в виде обычной ESQ.

Показать все комментарии