2024.01.03
2023.04.22
2023.03.16
2023.01.04
2023.01.02
2022.12.30
2022.12.27
2022.12.04
2022.12.01
2022.11.07
2022.10.27
2022.10.26
2022.10.18
2022.10.12
2022.07.17
2022.04.17
2022.03.06
builder.Services.AddTransient<IImportHeaderFilter, ImportHeaderFilterA>();
builder.Services.AddTransient<IImportHeaderFilter, ImportHeaderFilterB>();
builder.Services.AddTransient<IImportHeaderFilter, ImportHeaderFilterC>();
[ExcelImporter(ImportHeaderFilter = typeof(ImportHeaderFilterB))]
public class ImportExcelTemplateDto
{
[ImporterHeader(Name = "TypeName")]
public string? Name { get; set; }
}
2022.03.02
[Fact(DisplayName = "Обратный вызов при импорте")]
public async Task ImportResultCallBack_Test()
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "缴费流水导入模板.xlsx");
var import = await Importer.Import<ImportPaymentLogDto>(filePath, (importResult) =>
{
int rowNum = 2; // номер первой строки данных в Excel
foreach (var importPaymentLogDto in importResult.Data)
{
if (importPaymentLogDto.Amount > 5000)
{
var dataRowError = new DataRowErrorInfo();
dataRowError.RowIndex = rowNum;
dataRowError.FieldErrors.Add("Amount", "Сумма не может превышать 5000");
importResult.RowErrors.Add(dataRowError);
}
rowNum++;
}
return importResult;
});
import.ShouldNotBeNull();
import.HasError.ShouldBeTrue();
import.RowErrors.ShouldContain(p => p.RowIndex == 3 && p.FieldErrors.ContainsKey("Сумма не может превышать 5000"));
import.Exception.ShouldBeNull();
import.Data.Count.ShouldBe(20);
}
2022.02.28
2021.11.28- Добавление двух динамических атрибутов проверки (см. PR #319 by Afonsof91):
DynamicStringLengthAttribute
для поддержки динамической настройки проверки длины строковых значений. Пример использования:public class DynamicStringLengthImportDto
{
[ImporterHeader(Name = "Название")]
[Required(ErrorMessage = "Название обязательно")]
[DynamicStringLength(typeof(DynamicStringLengthImportDtoConsts), nameof(DynamicStringLengthImportDtoConsts.MaxNameLength), ErrorMessage = "Длина названия не должна превышать {1} символов")]
public string Name { get; set; }
}
public static class DynamicStringLengthImportDtoConsts
{
public static int MaxNameLength { get; set; } = 3;
}
RequiredIfAttribute
для поддержки динамической активации обязательности поля. Пример использования:public class RequiredIfAttributeImportDto
{
[ImporterHeader(Name = "Необходимость имени")]
[Required(ErrorMessage = "Необходимость имени обязательна")]
[ValueMapping("Да", true)]
[ValueMapping("Нет", false)]
public bool IsNameRequired { get; set; }
[ImporterHeader(Name = "Имя")]
[RequiredIf("IsNameRequired", "True", ErrorMessage = "Имя обязательно")]
[MaxLength(10, ErrorMessage = "Длина имени превышает максимальное значение: 10")]
public string Name { get; set; }
}
TimeSpan_Test
).2021.10.23
2021.10.13
2021.10.06
2021.10.05
2021.09.02
2021.08.27
2021.08.24
2021.08.07
23 июля 2021
12 марта 2021
8 марта 2021
5 марта 2021
23 февраля 2021
20 февраля 2021
31 января 2021
29 января 2021
9 января 2021
2 января 2021
21 декабря 2020
3 декабря 2020
26 ноября 2020
25 ноября 2020
20 ноября 2020 Для исправления ошибки длины списка проверки данных, которая всегда превышает 255 символов (#196) (https://github.com/dotnetcore/Magicodes.IE/issues/196)
29 октября 2020
20 октября 2020
1 октября 2020
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
AppDependencyResolver.Init(app.ApplicationServices);
// все остальные действия
}
26 сентября 2020
24 сентября 2020
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
AppDependencyResolver.Init(app.ApplicationServices);
// все остальные действия
}
14 сентября 2020
30 августа 2020
22 августа 2020
16 августа 2020
10 августа 2020
4 августа 2020
14 июля 2020
13 июля 2bk20
6 июля 2020
exporter.Append(list1,"sheet1").SeparateBySheet().Append(list2).ExportAppendData(filePath);
22 июня 2020
{{Formula::AVERAGE?params=G4:G6}}
{{Formula::SUM?params=G4:G6&G4}}
16 июня 2020
14 июня 2020
exporter.Append(list1).SeparateByColumn().Append(list2).ExportAppendData(filePath);
exporter.Append(list1).SeparateBySheet().Append(list2).ExportAppendData(filePath);
exporter.Append(list1).SeparateByRow().AppendHeaders().Append(list2).ExportAppendData(filePath);
Task<byte[]> ExportListBytesByTemplate<T>(ICollection<T> data, PdfExporterAttribute pdfExporterAttribute, string template);
Task<byte[]> ExportBytesByTemplate<T>(T data, PdfExporterAttribute pdfExporterAttribute, string template);
7 июня 2020
【Nuget】обновление версии до 2.2.0-beta8
【Экспорт шаблонов Excel】Поддержка изображений #62, синтаксис рендера следующий:
{{Image::ImageUrl?Width=50&Height=120&Alt=404}}
{{Image::ImageUrl?w=50&h=120&Alt=404}}
{{Image::ImageUrl?Alt=404}}
/// <summary>
/// Добавляет коллекцию к текущему экспорту
/// append the collection to context
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataItems"></param>
/// <returns></returns>
ExcelExporter Append<T>(ICollection<T> dataItems) where T : class;
/// <summary>
/// Экспортировать все добавленные данные
/summary>
/// <param name="fileName"></param>
/// <returns></returns>
Task<ExportFileInfo> ExportAppendData(string fileName);
/// <summary>
/// Экспортировать все добавленные данные
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
Task<byte[]> ExportAppendDataAsByteArray();
var exporter = new ExcelExporter();
var list1 = GenFu.GenFu.ListOf<ExportTestDataWithAttrs>();
var list2 = GenFu.GenFu.ListOf<ExportTestDataWithSplitSheet>(30);
var result = exporter.Append(list1).Append(list2).ExportAppendData(filePath);
/// <summary>
/// Экспорт Excel
/// </summary>
/// <param name="fileName">Название файла</param>
/// <param name="dataItems">Данные</param>
/// <param name="exporterHeaderFilter">Фильтр заголовков</param>
/// <param name="maxRowNumberOnASheet">Максимальное количество строк на одном листе, если установлено, то создаются несколько листов</param>
/// <returns>Файл</returns>
Task<ExportFileInfo> Export(string fileName, DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = null, int maxRowNumberOnASheet = 1000000);
/// <summary>
/// Экспорт Excel в виде массива байтов
/// </summary>
/// <param name="dataItems">Данные</param>
/// <param name="exporterHeaderFilter">Фильтр заголовков</param>
/// <param name="maxRowNumberOnASheet">Максимальное количество строк на одном листе, если установлено, то создаются несколько листов</param>
/// <returns>Массив байтов файла</returns>
Task<byte[]> ExportAsByteArray(DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = null, int maxRowNumberOnASheet = 1000000);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )