快速操作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;
}
}
}