Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        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);
        }