private static ExcelExportSettings <TEntity> ValidateAndMapSettings(IEntityExportSettings <TEntity> settings) { ExcelExportSettings <TEntity> excelExportSettings = settings as ExcelExportSettings <TEntity>; if (excelExportSettings == null) { throw new ArgumentException(nameof(settings)); } return(excelExportSettings); }
public async Task <string> ExportDataToExcelAsync([FromBody] LeadGetAllRequest request, uint?page = null, uint?pageSize = null) { Uri fileUrl; TimeSpan timeZoneOffset = TimeSpan.Zero; string fileName = $"TestDrive-Leads-{DateTime.UtcNow.FormatUtcDateTimeToUserFriendlyString(timeZoneOffset, "yyyyMMddHHmmss")}"; string worksheetsName = "leads"; using (var uow = UowManager.CurrentOrCreateNew(true)) { ExcelExportSettings <Lead> settings = new ExcelExportSettings <Lead>( fileName, worksheetsName, DomainService, ContentManager, ExcelExportLeadOptionsProvider.GetEntityOptions((r) => r.UseByDefault, (key) => key, timeZoneOffset), BuildRetrieveManyFilter(request), request.Sorting, page ?? 0 * pageSize ?? 0, pageSize); fileUrl = await ExcelExportService <Lead> .ExportDataAsync(settings); } return(fileUrl.ToString()); }
private static async Task <Uri> InnerExportDataAsync(ExcelExportSettings <TEntity> settings) { Uri fileUri; using (ExcelPackage package = new ExcelPackage()) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(settings.WorksheetName); int workSheetRow = 1; int workSheetCell = 1; foreach (var item in settings.PropertyMappers.Select(r => r.DisplayName)) { worksheet.Cells[workSheetRow, workSheetCell].Value = item; workSheetCell++; } int totalCount = await settings.OperateWithManyEntitiesService.GetTotalCountAsync(settings.Filter); int skip = settings.Skip.HasValue ? (int)settings.Skip.Value : 0; int take = settings.Take.HasValue ? (int)settings.Take.Value : totalCount - skip; IList <Func <TEntity, object> > mapActions = settings.PropertyMappers.Select(r => r.MapAction).ToList(); while (skip < totalCount && take > 0) { int currentRequestTake = take < settings.MaxTakePerRequest ? take : (int)settings.MaxTakePerRequest; IList <TEntity> entities = await settings.OperateWithManyEntitiesService .RetrieveAllAsync(settings.Filter, settings.Sorting, skip, currentRequestTake); foreach (var entity in entities) { workSheetRow++; workSheetCell = 1; foreach (var mapAction in mapActions) { object value = TryGetValueOrReturnDefault(entity, mapAction); worksheet.Cells[workSheetRow, workSheetCell].Value = value; workSheetCell++; } } skip += currentRequestTake; take -= currentRequestTake; } fileUri = await settings.ContentManager .SaveFile(package.GetAsByteArray(), $"{settings.FileName}{settings.FileExtension}", settings.FileContentType); } return(fileUri); }