快速操作Excel

    地址:https://github.com/dotnetcore/Magicodes.IE

    记录:
    使用IImportHeaderFilter过滤器可以自定义导出值映射

    1. using Magicodes.ExporterAndImporter.Core.Filters;
    2. using Magicodes.ExporterAndImporter.Core.Models;
    3. using System;
    4. using System.Collections.Generic;
    5. using System.Linq;
    6. using Volo.Abp;
    7. using Volo.Abp.Caching;
    8. using Volo.Abp.Tracing;
    9. namespace Sanhe.ContestManagement.ContestItems
    10. {
    11. /// <summary>
    12. /// 导入指定赛项时自定义过滤器
    13. /// </summary>
    14. /// <remarks>值映射</remarks>
    15. public class ContestItemHeaderFilter : IImportHeaderFilter
    16. {
    17. private readonly ICorrelationIdProvider _correlationIdProvider;
    18. private readonly IDistributedCache<string> _distributedCache;
    19. private readonly IContestItemRepository _contestItemRepository;
    20. public ContestItemHeaderFilter(
    21. ICorrelationIdProvider correlationIdProvider,
    22. IDistributedCache<string> distributedCache,
    23. IContestItemRepository contestItemRepository)
    24. {
    25. _correlationIdProvider = correlationIdProvider;
    26. _distributedCache = distributedCache;
    27. _contestItemRepository = contestItemRepository;
    28. }
    29. public List<ImporterHeaderInfo> Filter(List<ImporterHeaderInfo> importerHeaderInfos)
    30. {
    31. foreach (var item in importerHeaderInfos)
    32. {
    33. if (item.PropertyName == nameof(ContestItemImportExcelTemplateDto.CategoryId))
    34. {
    35. Guid contestItemId = _distributedCache.Get(_correlationIdProvider.Get()).To<Guid>();
    36. var categories = _contestItemRepository.GetCategoriesAsync(contestItemId).GetAwaiter().GetResult();
    37. if (!categories.Any())
    38. {
    39. throw new UserFriendlyException("该赛项没有设置组别,无法生成导入模板!");
    40. }
    41. item.MappingValues = categories.ToDictionary(p => p.CategoryName, p => (dynamic)p.Id);
    42. }
    43. }
    44. return importerHeaderInfos;
    45. }
    46. }
    47. }