Этот учебник объясняет, как выполнить экспорт данных студентов в Excel с помощью библиотеки Magicodes.
Работает со свойствами и членами перечислений.
Install-Package Magicodes.IE.Excel
public async Task ExportHeader()
{
IExcelExporter exporter = new ExcelExporter();
var filePath = "h.xlsx";
var arr = new[] { "Name1", "Name2", "Name3", "Name4", "Name5", "Name6" };
var sheetName = "Test";
var result = await exporter.ExportHeaderAsByteArray(arr, sheetName);
result.ToExcelExportFileInfo(filePath);
}
public async Task ExportHeader()
{
IExporter exporter = new ExcelExporter();
var filePath = "h.xlsx";
var result = await exporter.ExportHeaderAsByteArray<Student>(new Student());
result.ToExcelExportFileInfo(filePath);
}
public class Student
{
/// <summary>
/// Имя
/// </summary>
public string Name { get; set; }
/// <summary>
/// Возраст
/// </summary>
public int Age { get; set; }
}
public async Task Export()
{
IExporter exporter = new ExcelExporter();
var result = await exporter.Export("a.xlsx", new List<Student>()
{
new Student
{
Name = "Мистер А",
Age = 18
},
new Student
{
Name = "Мистер Б",
Age = 19
},
new Student
{
Name = "Мистер В",
Age = 20
}
});
}
С использованием приведенного выше кода можно экспортировать Excel следующим образом:
public async Task Export()
{
IExporter exporter = new ExcelExporter();
var result = await exporter.Export("test.xlsx", new List<Student>()
{
new Student
{
Name = "Мистер А",
Age = 18,
Remarks = "Меня зовут Мистер А, мне 18 лет",
Birthday = DateTime.Now
},
new Student
{
Name = "Мистер Б",
Age = 19,
Remarks = "Меня зовут Мистер Б, мне 19 лет",
Birthday = DateTime.Now
},
new Student
{
Name = "Мистер C",
Age = 20,
Remarks = "Меня зовут Мистер C, мне 20 лет",
Birthday = DateTime.Now
}
});
}
/// <summary>
/// Информация о студентах
/// </summary>
[ExcelExporter(Name = "Студенты", TableStyle = "Light10", AutoFitAllColumn = true, MaxRowNumberOnASheet = 2)]
public class Student
{
/// <summary>
/// Имя
/// </summary>
[ExporterHeader(DisplayName = "Имя")]
public string Name { get; set; }
/// <summary>
/// Возраст
/// </summary>
[ExporterHeader(DisplayName = "Возраст")]
public int Age { get; set; }
/// <summary>
/// Примечание
/// </summary>
public string Remarks { get; set; }
/// <summary>
/// Дата рождения
/// </summary>
[ExporterHeader(DisplayName = "Дата рождения", Format = "yyyy-MM-dd")]
public DateTime Birthday { get; set; }
}
С использованием приведенного выше кода можно экспортировать Excel следующим образом:
/// <summary>
/// Информация о студентах
/// </summary>
[ExcelExporter(Name = "Студенты", TableStyle = "Light10", AutoFitAllColumn = true, MaxRowNumberOnASheet = 2, ExporterHeaderFilter = typeof(ExporterStudentHeaderFilter))]
public class Student
{
/// <summary>
/// Имя
/// </summary>
[ExporterHeader(DisplayName = "Имя")]
public string Name { get; set; }
/// <summary>
/// Возраст
/// </summary>
[ExporterHeader(DisplayName = "Возраст", Format = "#,##0")]
public int Age { get; set; }
/// <summary>
/// Примечание
/// </summary>
public string Remarks { get; set; }
}
public class ExporterStudentHeaderFilter : IExporterHeaderFilter
{
/// <summary>
/// Фильтр заголовков (изменение имени)
/// </summary>
/// <param name="exporterHeaderInfo"></param>
/// <returns></returns>
public ExporterHeaderInfo Filter(ExporterHeaderInfo exporterHeaderInfo)
{
if (exporterHeaderInfo.DisplayName.Equals("Имя"))
{
exporterHeaderInfo.DisplayName = "name";
}
return exporterHeaderInfo;
}
}
С использованием приведенного выше фрагмента кода мы реализуем интерфейс IExporterHeaderFilter, который поддерживает многоговорильность, динамическое управление отображением колонок и другие сценарии.
class Program
{
static async Task Main(string[] args)
{
IExporter exporter = new ExcelExporter();
// Генерация тестовых данных
var personList = GenFu.GenFu.ListOf<Person>();
// Экспорт одного файла, содержащего только "FirstName", "LastName" столбцы
string fields = "FirstName,LastName"; // Можно настроить желаемые поля для экспорта
var expandoObjectList = new List<ExpandoObject>(personList.Count);
var propertyInfoList = new List<PropertyInfo>();
var fieldsAfterSplit = fields.Split(',');
``````csharp
foreach (var field in fieldsAfterSplit)
{
var propertyName = field.Trim();
var propertyInfo = typeof(Person).GetProperty(propertyName);
if (propertyInfo == null)
{
throw new Exception($"Свойство: {propertyName} не найдено в типе: {typeof(Person)}");
}
propertyInfoList.Add(propertyInfo);
}
foreach (var person in personList)
{
var shapedObj = new ExpandoObject();
foreach (var propertyInfo in propertyInfoList)
{
var propertyValue = propertyInfo.GetValue(person);
((IDictionary<string, object>)shapedObj).Add(propertyInfo.Name, propertyValue);
}
expandoObjectList.Add(shapedObj);
}
string filePath = Path.Combine(Directory.GetCurrentDirectory(), "dynamicExportExcel.xlsx");
var result = await exporter.ExportAsByteArray<ExpandoObject>(expandoObjectList);
File.WriteAllBytes(filePath, result);
}
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
public int Age { get; set; }
public int NumberOfKids { get; set; }
}
С помощью приведённого выше кода можно экспортировать данные в Excel следующим образом:
[ValueMapping(text: "да", value: true)]
[ValueMapping(text: "нет", value: false)]
[ValueMapping(text: "микро-клиент", value: 0)]
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )