快速操作Excel
地址:https://github.com/dotnetcore/Magicodes.IE
记录:
使用IImportHeaderFilter过滤器可以自定义导出值映射
using Magicodes.ExporterAndImporter.Core.Filters;using Magicodes.ExporterAndImporter.Core.Models;using System;using System.Collections.Generic;using System.Linq;using Volo.Abp;using Volo.Abp.Caching;using Volo.Abp.Tracing;namespace Sanhe.ContestManagement.ContestItems{/// <summary>/// 导入指定赛项时自定义过滤器/// </summary>/// <remarks>值映射</remarks>public class ContestItemHeaderFilter : IImportHeaderFilter{private readonly ICorrelationIdProvider _correlationIdProvider;private readonly IDistributedCache<string> _distributedCache;private readonly IContestItemRepository _contestItemRepository;public ContestItemHeaderFilter(ICorrelationIdProvider correlationIdProvider,IDistributedCache<string> distributedCache,IContestItemRepository contestItemRepository){_correlationIdProvider = correlationIdProvider;_distributedCache = distributedCache;_contestItemRepository = contestItemRepository;}public List<ImporterHeaderInfo> Filter(List<ImporterHeaderInfo> importerHeaderInfos){foreach (var item in importerHeaderInfos){if (item.PropertyName == nameof(ContestItemImportExcelTemplateDto.CategoryId)){Guid contestItemId = _distributedCache.Get(_correlationIdProvider.Get()).To<Guid>();var categories = _contestItemRepository.GetCategoriesAsync(contestItemId).GetAwaiter().GetResult();if (!categories.Any()){throw new UserFriendlyException("该赛项没有设置组别,无法生成导入模板!");}item.MappingValues = categories.ToDictionary(p => p.CategoryName, p => (dynamic)p.Id);}}return importerHeaderInfos;}}}
