编辑
2025-10-21
C#
00

目录

Magicodes.IE简介
开发环境准备
Excel导入模板生成
总结

在C#项目开发中,Excel数据导入是一个常见需求,尤其在企业应用、教育管理系统等场景中。传统的Excel导入方案往往代码繁琐、错误处理复杂,本文将通过详细案例,教你如何使用Magicodes.IE这款强大的开源库,实现高效、优雅的Excel导入功能。

Magicodes.IE简介

Magicodes.IE是一个.NET平台下功能强大的导入导出通用库,支持Excel、Word、PDF、HTML等多种格式,尤其擅长处理Excel数据的导入导出。它具有以下优势:

  • 自动生成导入模板,省去手动创建模板的繁琐
  • 支持丰富的数据验证功能,包括必填项、数据类型、长度限制等
  • 提供详细的错误提示与可视化错误标注
  • 支持枚举映射与自定义值映射
  • 简洁优雅的API设计,易于集成与使用

开发环境准备

在开始前,我们需要通过NuGet安装Magicodes.IE.Excel包:

C#
// 通过NuGet包管理器控制台安装 Install-Package Magicodes.IE.Excel // 或者使用dotnet CLI dotnet add package Magicodes.IE.Excel

Excel导入模板生成

Magicodes.IE最强大的功能之一是自动生成Excel导入模板。不需要手动创建Excel模板,而是根据定义好的Dto自动生成,大大提高了开发效率。

C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using Magicodes.ExporterAndImporter.Core; using Magicodes.ExporterAndImporter.Excel; namespace AppMagicodesIE { public class ImportStudentDto { [Display(Name = "序号")] public int SequenceNumber { get; set; } [Display(Name = "学籍号")] [Required(ErrorMessage = "学籍号不能为空")] public string StudentNub { get; set; } [Display(Name = "姓名")] [Required(ErrorMessage = "姓名不能为空")] public string Name { get; set; } [Display(Name = "身份证号")] public string IdNumber { get; set; } [Display(Name = "性别")] public string Gender { get; set; } [Display(Name = "家庭住址")] public string Address { get; set; } [Display(Name = "状态")] public string Status { get; set; } [Display(Name = "备注")] public string Remarks { get; set; } } }
C#
using Magicodes.ExporterAndImporter.Core; using Magicodes.ExporterAndImporter.Excel; using System; using System.Collections.Generic; using System.Threading.Tasks; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using Magicodes.ExporterAndImporter.Core.Filters; using Magicodes.ExporterAndImporter.Core.Models; using System.Dynamic; using System.Reflection; using System.IO; namespace AppMagicodesIE { class Program { static async Task Main(string[] args) { Console.WriteLine("Magicodes.IE Excel导入演示程序"); Console.WriteLine("==============================="); // 创建导入器实例 IImporter importer = new ExcelImporter(); try { // 生成导入模板 await GenerateStudentImportTemplate(importer); // 演示导入操作 (如果有测试文件) string importFilePath = Path.Combine(Directory.GetCurrentDirectory(), "学生数据导入模板.xlsx"); if (File.Exists(importFilePath)) { Console.WriteLine("\n请先填写模板数据,然后按任意键继续导入..."); Console.ReadKey(); await ImportStudentData(importer, importFilePath); } } catch (Exception ex) { Console.WriteLine($"发生错误: {ex.Message}"); } Console.WriteLine("\n程序执行完毕,按任意键退出..."); Console.ReadKey(); } /// <summary> /// 生成Excel导入模板 /// </summary> public static async Task GenerateStudentImportTemplate(IImporter importer) { var filePath = Path.Combine(Directory.GetCurrentDirectory(), "学生数据导入模板.xlsx"); if (File.Exists(filePath)) File.Delete(filePath); Console.WriteLine($"正在生成Excel导入模板..."); var result = await importer.GenerateTemplate<ImportStudentDto>(filePath); if (result != null && File.Exists(filePath)) { Console.WriteLine($"模板生成成功,路径:{filePath}"); // 获取文件大小信息 var fileInfo = new FileInfo(filePath); Console.WriteLine($"文件大小: {fileInfo.Length / 1024.0:F2} KB"); // 替换为: Console.WriteLine("模板已生成,请查看文件了解详情"); } else { Console.WriteLine("模板生成失败!"); } } /// <summary> /// 导入学生数据 /// </summary> public static async Task ImportStudentData(IImporter importer, string filePath) { Console.WriteLine($"开始导入学生数据,文件路径: {filePath}"); var importResult = await importer.Import<ImportStudentDto>(filePath); if (importResult == null) { Console.WriteLine("导入失败,未能获取导入结果"); return; } // 检查是否有异常 if (importResult.Exception != null) { Console.WriteLine($"导入过程发生异常: {importResult.Exception.Message}"); return; } // 检查是否有模板错误 if (importResult.TemplateErrors?.Count > 0) { Console.WriteLine("导入模板存在以下错误:"); foreach (var error in importResult.TemplateErrors) { Console.WriteLine($"- [{error.ErrorLevel}] {error.Message}"); } } // 检查数据行错误 if (importResult.RowErrors.Count > 0) { Console.WriteLine("\n导入数据存在以下错误:"); foreach (var rowError in importResult.RowErrors) { Console.WriteLine($"第{rowError.RowIndex}行出现错误:"); foreach (var fieldError in rowError.FieldErrors) { Console.WriteLine($" - 字段 \"{fieldError.Key}\": {fieldError.Value}"); } } // 检查错误标注文件是否生成 string errorFilePath = filePath + "_.xlsx"; if (File.Exists(errorFilePath)) { Console.WriteLine($"\n已生成错误标注文件: {errorFilePath}"); } } // 如果没有错误,显示导入的数据 if (!importResult.HasError) { Console.WriteLine($"\n成功导入 {importResult.Data.Count} 条学生数据:"); int index = 0; foreach (var student in importResult.Data) { if (index < 5) // 只显示前5条,避免输出过多 { Console.WriteLine($"- 学生: {student.Name}, 学号: {student.StudentNub}, 性别: {student.Gender}"); } index++; } if (importResult.Data.Count > 5) { Console.WriteLine($"... 共 {importResult.Data.Count} 条记录"); } } } } }

image.png

生成的模板中,枚举字段会自动生成下拉选择,必填项的列头会标红,大大提升了用户体验。

总结

Magicodes.IE是一个功能强大且易用的Excel导入导出库,特别适合用于处理复杂的数据验证和导入需求。通过本文的学生数据导入案例,我们展示了如何利用Magicodes.IE实现高效、稳定的Excel数据导入功能。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!