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

OSCHINA-MIRROR/magicodes-Magicodes.IE

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

Шаблон экспорта в Excel — динамический экспорт

Описание

Magicodes.IE в настоящее время поддерживает экспорт шаблона Excel с использованием JObject, Dictionary и ExpandoObject для динамического экспорта. Подробнее см. данное руководство.

Эта функция была частично реализована на основе работы arik. Благодарю еще раз arik!

Перед началом этого руководства повторите синтаксис шаблонного экспорта:

{{Company}}  //Отображение ячейки
{{Table>>BookInfos|RowNo}} //Начало отображения таблицы
{{Remark|>>Table}}//Конец отображения таблицы
{{Image::ImageUrl?Width=50&Height=120&Alt=404}} //Отображение изображения
{{Image::ImageUrl?w=50&h=120&Alt=404}} //Отображение изображения
{{Image::ImageUrl?Alt=404}} //Отображение изображения
{{Formula::AVERAGE?params=G4:G6}}  //Отображение формулы
{{Formula::SUM?params=G4:G6&G4}}   //Отображение формулы

Если вы не знакомы с шаблонным экспортом Magicodes.IE, прочитайте следующее руководство.

Шаблон экспорта Excel — Экспорт заказа книг

Дальше мы начинаем это руководство.

1. Установка пакета Magicodes.IE.Excel

Install-Package Magicodes.IE.Excel

2. Подготовка файла шаблона Excel

Пример ниже.

Файл шаблона

Этот файл можно найти в тестовом проекте с названием 【DynamicExportTpl.xlsx】.

3. Использование JObject для выполнения динамического экспорта

Код достаточно простой и представлен ниже.

string json = @"{
  'Company': '雪雁',
  'Address': '湖南长沙',
  'Contact': '雪雁',
  'Tel': '136xxx',
  'BookInfos': [
    {'No':'a1','RowNo':1,'Name':'Docker+Kubernetes应用开发与快速上云','EditorInChief':'李文强','PublishingHouse':'机械工业出版社','Price':65,'PurchaseQuantity':10000,'Cover':'https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965','Remark':'备注'},
    {'No':'a1','RowNo':1,'Name':'Docker+Kubernetes应用开发与快速上云','EditorInChief':'李文强','PublishingHouse':'机械工业出版社','Price':65,'PurchaseQuantity':10000,'Cover':'https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965','Remark':'备注'}
  ]
}";
var jobj = JObject.Parse(json);
//Путь до шаблона
var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
    "DynamicExportTpl.xlsx");
//Создание объектов экспорта Excel
IExportFileByTemplate exporter = new ExcelExporter();
//Путь экспорта
var filePath = Path.Combine(Directory.GetCurrentDirectory(), nameof(DynamicExportByTemplate_Test) + ".xlsx");
if (File.Exists(filePath)) File.Delete(filePath);

//Экспорт из шаблона
await exporter.ExportByTemplate(filePath, jobj, tplPath);

Вышеуказанный код можно найти в юнит-тесте DynamicExportWithJObjectByTemplate_Test.

Важно отметить, что поскольку используется JObject, вам потребуется установить пакет Newtonsoft.Json. Однако, Magicodes.IE.Excel не зависит от Newtonsoft.Json встроенно.

В настоящее время динамический экпорт шаблонов Excel поддерживается только через объекты JObject, а в будущем будут поддерживаться более динамичные методы.

После запуска вы можете видеть результаты, как показано на следующем рисунке.

Результат динамического экспорта

11. Использование Dictionary<string, object> для выполнения динамического экспорта

Экспортированный код такой же, как выше, за исключением того, что используется структура данных Dictionary.

var data = new Dictionary<string, object>()
{
    { "Company","雪雁" },
    { "Address", "湖南长沙" },
    { "Contact", "雪雁" },
    { "Tel", "136xxx" },
    { "BookInfos",new List<Dictionary<string,object>>()
        {
            new Dictionary<string, object>()
            {
                {"No","A1" },
                {"RowNo",1 },
                {"Name","Docker+Kubernetes应用开发与快速上云" },
                {"EditorInChief","李文强" },
                {"PublishingHouse","机械工业出版社" },
                {"Price",65 },
                {"PurchaseQuantity",50000 },
                {"Cover","https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965" },
                {"Remark","买起" }
            },
            new Dictionary<string, object>()
            {
                {"No","A2" },
                {"RowNo",2 },
                {"Name","Docker+Kubernetes应用开发与快速上云" },
                {"EditorInChief","李文强" },
                {"PublishingHouse","机械工业出版社" },
                {"Price",65 },
                {"PurchaseQuantity",50000 },
                {"Cover","https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965" },
                {"Remark","k8s真香" }
            }
        }
    }
};
//Путь до шаблона
var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
    "DynamicExportTpl.xlsx");
//Создание объектов экспорта Excel
IExportFileByTemplate exporter = new ExcelExporter();
//Путь экспорта
var filePath = Path.Combine(Directory.GetCurrentDirectory(), nameof(DynamicExportWithDictionaryByTemplate_Test) + ".xlsx");
if (File.Exists(filePath)) File.Delete(filePath);

//Экспорт из шаблона
await exporter.ExportByTemplate(filePath, data, tplPath);

Укажите конкретный код DynamicExportWithDictionaryByTemplate_Test.

5. Использование ExpandoObject для выполнения динамического экспорта

Как и выше, код представлен ниже.

dynamic data = new ExpandoObject();
data.Company = "雪雁";
data.Address = "湖南长沙";
data.Contact = "雪雁";
data.Tel = "136xxx";
data.BookInfos = new List<ExpandoObject>() { };

dynamic book1 = new ExpandoObject();
book1.No = "A1";
book1.RowNo = 1;
book1.Name = "Docker+Kubernetes应用开发与快速上云";
book1.EditorInChief = "李文强";
book1.PublishingHouse = "机械工业出版社";
book1.Price = 65;
book1.PurchaseQuantity = 50000;
book1.Cover = "https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965";
book1.Remark = "买买买";
data.BookInfos.Add(book1);

dynamic book2 = new ExpandoObject();
book2.No = "A2";
book2.RowNo = 2;
book2.Name = "Docker+Kubernetes应用开发与快速上云";
book2.EditorInChief = "李文强";
book2.PublishingHouse = "机械工业出版社";
book2.Price = 65;
book2.PurchaseQuantity = 50000;
book2.Cover = "https://img9.doubanio.com/view/ark_article_cover/retina/public/135025435.jpg?v=1585121965";
book2.Remark = "买买买";
data.BookInfos.Add(book2);

//Путь до шаблона
var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates",
    "DynamicExportTpl.xlsx");
//Создание объектов экспорта Excel
IExportFileByTemplate exporter = new ExcelExporter();
//Путь экспорта
var filePath = Path.Combine(Directory.GetCurrentDirectory(), nameof(DynamicExportWithExpandoObjectByTemplate_Test) + ".xlsx");
if (File.Exists(filePath)) File.Delete(filePath);

//Экспорт согласно шаблону
await exporter.ExportByTemplate(filePath, data, tplPath);

Укажите конкретный код DynamicExportWithExpandoObjectByTemplate_Test.

В конце концов

Это руководство завершено. Если у вас есть вопросы, пожалуйста, отправьте больше запросов.

Magicodes.IE: универсальные библиотеки импорта и экспорта, поддерживающие импорт и экспорт DTO, шаблонный экспорт, сложный экспорт и динамический экспорт, поддерживают Excel, CSV, Word, PDF и HTML.

Связанные библиотеки постоянно обновляются, могут быть небольшие различия в опыте использования и этом руководстве. Для справки используйте конкретный код, версию логов, примеры юнит-тестов.

Опубликовать ( 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