General-purpose library for importing and exporting data supporting import/export of DTOs, template export, various types of exports, and dynamic export. Supports Excel, CSV, Word, PDF, and HTML.
For more details see: https://dev.azure.com/xinlaiopencode/Magicodes.IE/_build?definitionId=4&_a=summary
|--------------|:-------------------:|
| Magicodes.IE.Core | |
| Magicodes.IE.Excel |
|
| Magicodes.IE.Excel.NPOI |
|
| Magicodes.IE.Excel.AspNetCore |
|
| Magicodes.IE.Pdf |
|
| Magicodes.IE.Word |
|
| Magicodes.IE.Html |
|
| Magicodes.IE.Csv |
|
| Magicodes.IE.AspNetCore |
|
| Magicodes.IE.EPPlus |
|
| Magicodes.IE.Excel.Abp |
|
| Magicodes.IE.Csv.Abp |
|
| Magicodes.IE.Html.Abp |
|
| Magicodes.IE.Pdf.Abp |
|
| Magicodes.IE.Word.Abp |
|
| Magicodes.IE.Stash |
|
Другие учебники см. ниже или в юнит тестах
[Fact(DisplayName = "DTO экспорт поддерживает динамические типы")]
public async Task ExportAsByteArraySupportDynamicType_Test()
{
IExporter exporter = new ExcelExporter();
var filePath = GetTestFilePath($"{nameof(ExportAsByteArraySupportDynamicType_Test)}.xlsx");
DeleteFile(filePath);
var source = GenFu.GenFu.ListOf<ExportTestDataWithAttrs>();
string fields = "text,number,name";
var shapedData = source.ShapeData(fields) as ICollection<ExpandoObject>;
var result = await exporter.ExportAsByteArray<ExpandoObject>(shapedData);
result.ShouldNotBeNull();
result.Length.ShouldBeGreaterThan(0);
File.WriteAllBytes(filePath, result);
File.Exists(filePath).ShouldBeTrue();
}
/// <summary>
/// Пол
/// </summary>
[ImporterHeader(Name = "Пол")]
[Required(ErrorMessage = "Пол не может быть пустым")]
[ValueMapping(text: "Мужской", 0)]
[ValueMapping(text: "Женский", 1)]
public Genders Gender { get; set; }
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class GenderLocalAttribute : ValueMappingsBaseAttribute
{
public override Dictionary<string, object> GetMappings(PropertyInfo propertyInfo)
{
var res = new Dictionary<string, object>();
res.Add("Мужской", 0);
res.Add("Женский", 1);
return res;
}
}
/// <summary>
/// Пол
/// </summary>
[ImporterHeader(Name = "Пол")]
[Required(ErrorMessage = "Пол не может быть пустым")]
[GenderLocal]
public Genders Gender { get; set; }
Перечисления по умолчанию автоматически получают описание, имя, название и значение для создания пунктов данных
/// <summary>
/// Состояние студента Нормальный, Утрачен, Отчислен, Самостоятельная работа, Прохождение практики, Выпуск, В армии
/// </summary>
public enum StudentStatus
{
/// <summary>
/// Нормальный
/// </summary>
[Display(Name = "Нормальный")]
Normal = 0,
/// <summary>
/// Утрачен
/// </summary>
[Description("Утрачен")]
Lost = 1,
/// <summary>
/// Отчисление
/// </summary>
[Display(Name = "Отчислен")]
DroppedOut = 2,
/// <summary>
/// Самостоятельная работа
/// </summary>
[Display(Name = "Самостоятельная работа")]
SelfEmployed = 3,
/// <summary>
/// Прохождение практики
/// </summary>
[Display(Name = "Прохождение практики")]
OnJobTraining = 4,
/// <summary>
/// Выпуск
/// </summary>
[Display(Name = "Выпуск")]
Graduated = 5,
/// <summary>
/// В армии
/// </summary>
[Display(Name = "В армии")]
InService = 6,
}
```
****
- **Тип bool по умолчанию создаёт пункты данных "Да" и "Нет"**
- **Если указаны пользовательские значения маппинга, то стандартные пункты не создаются**
- **Поддерживает многолистный импорт Excel;**
****
- **Поддерживает экспорт шаблонов Excel, JSON динамический экспорт, а также поддерживает рендеринг изображений**
****
Синтаксис рендера представлен ниже:
```
{{Компания}} //рендеринг ячейки
{{Таблица>>Информация_о_книгах|Строка}} //начало рендера таблицы
{{Замечание|>>Таблица}}//конец рендера таблицы
{{Изображение::Url_изображения?Ширина=50&Высота=120&Альт=404}} //рендеринг изображения
{{Изображение::Url_изображения?w=50&h=120&Альт=404}} //рендеринг изображения
{{Изображение::Url_изображения?Альт=404}} //рендеринг изображения
{{Формула::СРЕЗ?параметры=A4:A6}} //рендеринг формулы
{{Формула::СУММА?параметры=A4:A6&A4}} //рендеринг формулы
```
Поддержка пользовательского трубопровода будет добавлена в будущих версиях.
- **Поддерживает генерацию меток для шаблонов импорта Excel**
- **Поддержка импорта и экспорта изображений в Excel**
- Импорт изображений
- Импорт как Base64
- Импорт в временную директорию
- Импорт в указанную директорию
- Экспорт изображений
- Экспорт пути файла как изображения
- Экспорт сетевых путей как изображений
- **Поддержка экспорта нескольких сущностей в несколько листов**
- **Поддержка использования части атрибутов пространства System.ComponentModel.DataAnnotations для контроля импорта и экспорта** [#63](https://github.com/dotnetcore/Magicodes.IE/issues/63)
- **Поддержка использования пользовательских форматизаторов для экспорта Excel, Pdf, Csv и других данных в ASP.NET Core Web API, подробнее см. руководство** [#64](https://github.com/dotnetcore/Magicodes.IE/issues/64)
- **Поддержка экспорта с разделением по столбцам, листам и добавлению строк**
```csharp
exporter.Append(list1).SeparateByColumn().Append(list2).ExportAppendData(filePath);
```
Подробнее см. руководство «Магический экспорт».
- **Поддержка установки ширины ячеек при экспорте**
```csharp
[ExporterHeader(Width = 100)]
public DateTime Time3 { get; set; }
```
- **Экспорт Excel с указанием строки заголовков, добавление свойства HeaderRowIndex в атрибуте ExcelExporterAttribute для удобства экспорта начиная с первой строки.**
- **Поддержка встроенной проверки данных при создании шаблона импорта Excel**
Для включения встроенной проверки данных можно использовать свойство IsInterValidation, но следует отметить, что поддерживаются только атрибуты MaxLengthAttribute, MinLengthAttribute, StringLengthAttribute и RangeAttribute для включения этой проверки.


Поддерживается отображение подсказок ввода:

- **Поддержка импорта объединённых строк данных** [#239](https://github.com/dotnetcore/Magicodes.IE/issues/239)

- Добавлено обертывание модулей Abp, подробнее см. [#318](https://github.com/dotnetcore/Magicodes.IE/issues/318).
## **Контактная информация**
> ##### **Публичный аккаунт**
**Подпишитесь на публичный аккаунт "Макао Ляо Технология", чтобы получать последние статьи, руководства и документацию, а также присоединиться к сообществу WeChat:**
<table>
<tr>
<td>
<img align="left" src="./res/wechat.jpg" width="300"/>
</td>
<td>
<img align="right" src="res/IE_WeChat.png" width="300"/>
</td>
</tr>
</table>
> ##### **Группа QQ**
- **Группа обсуждения программирования <85318032>** (в связи с тем, что мы не часто онлайн, установлены определенные требования для входа)
> ##### **Официальный сайт и блог**
- **Официальный сайт: <https://docs.xin-lai.com/>**
- **Блог: <http://www.cnblogs.com/codelove/>**
> ##### **Другие открытые библиотеки**
- **<https://github.com/xin-lai>**
- **<https://gitee.com/magicodes>**
### Вкладчики кода
<a href="https://github.com/dotnetcore/Magicodes.IE/graphs/contributors"><img src="https://opencollective.com/magicodes/contributors.svg?width=890&button=false" /></a>
### Финансовые вкладчики
Станьте финансовым вкладчиком и помогите нам поддерживать нашу общность. [[Внести вклад](https://opencollective.com/magicodes/contribute)]
#### Индивидуальные вкладчики
<a href="https://opencollective.com/magicodes"><img src="https://opencollective.com/magicodes/individuals.svg?width=890"></a>
#### Организации
Поддержите этот проект через вашу организацию. Ваш логотип будет размещен здесь со ссылкой на ваш сайт. [[Внести вклад](https://opencollective.com/magicodes/contribute)]
<a href="https://opencollective.com/magicodes/organization/0/website"><img src="https://opencollective.com/magicodes/organization/0/avatar.svg"></a>
<a href="https://opencollective.com/magicodes/organization/1/website"><img src="https://opencollective.com/magicodes/organization/1/avatar.svg"></a>
<a href="https://opencollective.com/magicodes/organization/2/website"><img src="https://opencollective.com/magicodes/organization/2/avatar.svg"></a>
<a href="https://opencollective.com/magicodes/organization/3/website"><img src="https://opencollective.com/magicodes/organization/3/avatar.svg"></a>
<a href="https://opencollective.com/magicodes/organization/4/website"><img src="https://opencollective.com/magicodes/organization/4/avatar.svg"></a>
<a href="https://opencollective.com/magicodes/organization/5/website"><img src="https://opencollective.com/magicodes/organization/5/avatar.svg"></a>
<a href="https://opencollective.com/magicodes/organization/6/website"><img src="https://opencollective.com/magicodes/organization/6/avatar.svg"></a>
<a href="https://opencollective.com/magicodes/organization/7/website"><img src="https://opencollective.com/magicodes/organization/7/avatar.svg"></a>
<a href="https://opencollective.com/magicodes/organization/8/website"><img src="https://opencollective.com/magicodes/organization/8/avatar.svg"></a>
<a href="https://opencollective.com/magicodes/organization/9/website"><img src="https://opencollective.com/magicodes/organization/9/avatar.svg"></a>
```
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )