1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/magicodes-Magicodes.IE

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.zh-CN.md 32 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 03.03.2025 03:18 5e09f6d

Magicodes.IE | English version

Project member of NCC Nuget Build status Downloads License

Stars over time

Azure DevOps tests (master) Azure DevOps coverage (branch) Financial sponsors on Open Collective

Table of Contents

  1. Overview
  2. Automatic Build
  3. NuGet Packages
  4. Notes
  5. Lessons
  6. Features
  7. Frequently Asked Questions (FAQ)
  8. Contact Us
  9. Release History
  10. Friends Sponsors

Overview

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.

Overall overview

Functionality

  • Excel
    • Import
      • Import DTO
        • Import settings
          • Sheet name specification (obtain sheet name), if empty — automatically selects the first one
          • Sheet index specification
          • Number of columns to read (starting from 1, if specified, supports blank rows and special columns)
          • Display errors (default true)
          • Description at top of sheet
          • Height of description at top of sheet (line break may not set height automatically, default uses standard row height in Excel)
          • Only error data
          • Header position
          • Maximum number of rows for import (no limit by default)
          • Filter results of import
          • Column header filter
          • Disable all filters
          • Ignore case sensitivity in column headers
        • Column configuration
          • Column name
          • Note
          • Author
          • Automatic removal of spaces, enabled by default
          • Remove all spaces including internal ones
          • Formatting (only for generating templates)
          • Column index, if 0 — calculated automatically
          • Ignore column
        • Import validation
          • DataAnnotations (MaxLength, Required...)
          • Allow duplicates
        • Value mapping
          • bool
          • Enumerations
        • Filters
          • Result filtering
          • Column header filtering
        • Special column data import
          • Image import
            • Import as Base64
            • Save in temporary directory
            • Save in specified directory
        • Row merging during import
        • Error handling
          • Template check errors
          • Data validation errors
          • Exceptions
          • Marking errors in imported Excel file
        • Generate import template
          • Data validation warnings
          • Mandatory field marking
          • Generation of drop-down list of data (only for enumerations)
          • Create notes
          • Built-in data validation in Excel and support for custom messages (disabled by default)
            • MaxLengthAttribute
            • MinLengthAttribute
            • StringLengthAttribute
            • RangeAttribute
        • Column placement during import (does not require following order of columns)
        • Multi-sheet import
      • Dynamic import (Magicodes.IE.Stash)
    • Export

Automatic Build

  • Build status: Build status
  • Azure DevOps coverage (master): Azure DevOps coverage (branch)
  • Azure DevOps tests (master): Azure DevOps tests (master)

For more details see: https://dev.azure.com/xinlaiopencode/Magicodes.IE/_build?definitionId=4&_a=summary

NuGet Packages

Stable version (recommended)| Название | NuGet |

|--------------|:-------------------:| | Magicodes.IE.Core | NuGet | | Magicodes.IE.Excel | NuGet | | Magicodes.IE.Excel.NPOI | NuGet | | Magicodes.IE.Excel.AspNetCore | NuGet | | Magicodes.IE.Pdf | NuGet | | Magicodes.IE.Word | NuGet | | Magicodes.IE.Html | NuGet | | Magicodes.IE.Csv | NuGet | | Magicodes.IE.AspNetCore | NuGet | | Magicodes.IE.EPPlus | NuGet | | Magicodes.IE.Excel.Abp | NuGet | | Magicodes.IE.Csv.Abp | NuGet | | Magicodes.IE.Html.Abp | NuGet | | Magicodes.IE.Pdf.Abp | NuGet | | Magicodes.IE.Word.Abp | NuGet | | Magicodes.IE.Stash | NuGet |

Замечания

  • Импорт Excel не поддерживает файлы ".xls", то есть не поддерживает Excel 97-2003.
  • Если вам нужно использовать в Docker, обратитесь к разделу "Использование в Docker" в документации.
  • Для всех функций уже созданы юнит-тесты, которые можно использовать в качестве примера при использовании библиотеки.

Уроки

  1. Основной учебник — импорт данных студентов (перейти к внутренним документам)
  2. Основной учебник — экспорт в Excel ([перейти к внутренним документам])
  3. Основной учебник — экспорт Pdf чеков (перейти к внутренним документам)
  4. Использование в Docker
  5. Динамический экспорт
  6. Множественный импорт листов
  7. Csv импорт/экспорт
  8. Экспорт/импорт изображений Excel (перейти к внутренним документам)
  9. Экспорт шаблонов Excel — экспорт заказа учебников (перейти к внутренним документам)
  10. Продвинутый учебник — импорт/экспорт с фильтрами
  11. Magicodes.IE — стильный экспорт
  12. Magicodes.IE.AspNetCore — одна строка кода для множественного экспорта различных форматов
  13. Тест производительности
  14. Экспорт объединённых строк Excel
  15. Экспорт шаблонов Excel — динамический экспорт
  16. Magicodes.IE.Excel.AspNetCore — быстрый экспорт Excel (новое)

Другие учебники см. ниже или в юнит тестах

Особенности- Должно использоваться вместе с соответствующими моделями импорта/экспорта DTO, поддерживающимися через DTO и связанные атрибуты для управления импортом/экспортом. Настройка атрибутов позволяет контролировать логику и результаты отображения без изменения логического кода;

  • Поддерживает различные фильтры, внедрение зависимостей для поддержки многоязычности, динамическое управление колонками и т.д.; подробнее см. юнит тесты:
    • Фильтр заголовков импорта [IImportHeaderFilter] (можно динамически указывать колонки импорта, отображаемые значения и их соответствие)
    • Фильтр заголовков экспорта [IImportHeaderFilter] (можно динамически контролировать колонки экспорта, поддерживается динамический экспорт (DataTable))
    • Фильтр коллекций заголовков экспорта [IImportHeadersFilter] (можно динамически контролировать колонки экспорта, поддерживается динамический экспорт (DataTable))
    • Фильтр результатов импорта [IImportResultFilter] (можно менять метаданные файла)
  • Экспорт поддерживает текстовое динамическое фильтрацию или обработку;
  • Импорт поддерживает автоматическое пропускание пустых строк между данными;
  • Импорт поддерживает автоматическую генерацию шаблона импорта на основе DTO, для обязательных полей будет автоматически добавлено описание;
  • Импорт поддерживает выбор значений из списка, пока что только для типов перечислений;
  • Импорт поддерживает удаление пробелов перед и после значений, а также внутри значений, можно указать конкретные столбцы для этого;
  • Импорт поддерживает проверку шаблонов и данных, единую обработку ошибок и предоставляет унифицированный объект ошибок, который включает исключения, ошибки шаблонов и ошибки строковых данных;
  • Поддерживает установку положения заголовков импорта, по умолчанию равно 1;
  • Поддерживает импорт при случайном расположении колонок, нет необходимости следовать строго порядку;
  • Поддерживает указание индекса колонок для импорта, по умолчанию автоматически распознается;
  • Экспорт Excel поддерживает разделение листов, достаточно установить значение свойства MaxRowNumberOnASheet атрибута ExporterAttribute, если значение равно 0, то разделение не происходит. Подробнее см. юнит тесты;
  • Поддерживает пометку ошибок в импортированном Excel;
  • Импорт поддерживает установку конечных колонок, если не установлено, то по умолчанию заканчивается на встрече пустой строки;
  • Поддерживает экспорт в HTML, Word, PDF, поддерживает создание пользовательских шаблонов экспорта;
    • Экспорт HTML
    • Экспорт Word
    • Экспорт PDF, поддерживает настройку, подробнее см. журнал обновлений
    • Экспорт чеков
  • Импорт поддерживает проверку повторений;
  • Поддерживает одиночный шаблон экспорта, часто используется для экспорта чеков, документов и других бизнес процессов
  • Поддерживает динамический экспорт колонок (на основе DataTable), и более чем 1 миллион записей будут автоматически разделены на листы. (Большое спасибо преподавателю Zhang Shanyou (https://github.com/xin-lai/Magicodes.IE/pull/8))
  • Поддерживает динамический экспорт колонок (dynamic/ExpandoObject)
        [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();
        }
  • Поддерживает маппинг значений, поддерживает установку маппинга значений через атрибут ValueMappingAttribute, пока что применимо только для перечислений и типа bool, поддерживает импорт и экспорт.
        /// <summary>
        ///     Пол
        /// </summary>
        [ImporterHeader(Name = "Пол")]
        [Required(ErrorMessage = "Пол не может быть пустым")]
        [ValueMapping(text: "Мужской", 0)]
        [ValueMapping(text: "Женский", 1)]
        public Genders Gender { get; set; }
  • Также можно наследовать базовый атрибут ValueMappingsBaseAttribute для реализации маппинга значений, пока что применимо только для перечислений и типа bool, поддерживает импорт и экспорт.
        [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,
			}
		```

		**![](./res/перечисления.png "Перечисления в виде последовательности данных")**

	- **Тип bool по умолчанию создаёт пункты данных "Да" и "Нет"**
	- **Если указаны пользовательские значения маппинга, то стандартные пункты не создаются**

- **Поддерживает многолистный импорт Excel;**
  **![](./res/многолистный_импорт.png "Перечисления в виде последовательности данных")**

- **Поддерживает экспорт шаблонов Excel, JSON динамический экспорт, а также поддерживает рендеринг изображений**
  **![](./res/экспорт_шаблонов_Excel.png "Экспорт шаблонов Excel")**

  Синтаксис рендера представлен ниже:

  ```
    {{Компания}}  //рендеринг ячейки
    {{Таблица>>Информация_о_книгах|Строка}} //начало рендера таблицы
    {{Замечание|>>Таблица}}//конец рендера таблицы
    {{Изображение::Url_изображения?Ширина=50&Высота=120&Альт=404}} //рендеринг изображения
    {{Изображение::Url_изображения?w=50&h=120&Альт=404}} //рендеринг изображения
    {{Изображение::Url_изображения?Альт=404}} //рендеринг изображения
    {{Формула::СРЕЗ?параметры=A4:A6}}  //рендеринг формулы
    {{Формула::СУММА?параметры=A4:A6&A4}}   //рендеринг формулы
  ```

  Поддержка пользовательского трубопровода будет добавлена в будущих версиях.

- **Поддерживает генерацию меток для шаблонов импорта Excel**
  ![](./res/метки_импорта_Excel.png "Метки импорта 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 для включения этой проверки.
![](./res/dataval1.png "Проверка данных в Excel")
![](./res/dataval2.png "Проверка данных в Excel")
Поддерживается отображение подсказок ввода:
![](./res/dataval3.png "Проверка данных в Excel")

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

  ![Импорт объединённых строк](res/image-20210306105147319.png)

- Добавлено обертывание модулей 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/magicodes-Magicodes.IE.git
git@api.gitlife.ru:oschina-mirror/magicodes-Magicodes.IE.git
oschina-mirror
magicodes-Magicodes.IE
magicodes-Magicodes.IE
master