Кто-нибудь знает, как или какую библиотеку использовать для этого?export IEnumerable <T> в Excel
ответ
Посмотрите здесь для библиотеки части:
Код, приведенный ниже, является кодом, который я использую для преобразования IEnumerable<T>
в DataTable, содержащий столбцы с именем для каждого свойства, а также значения каждого элемента в IEnumerable в виде строк. Это очень маленький хмель это сохранить его как CSV файл
public class IEnumerableToDataTable
{
public static DataTable CreateDataTableForPropertiesOfType<T>()
{
DataTable dt = new DataTable();
PropertyInfo[] piT = typeof(T).GetProperties();
foreach (PropertyInfo pi in piT)
{
Type propertyType = null;
if (pi.PropertyType.IsGenericType)
{
propertyType = pi.PropertyType.GetGenericArguments()[0];
}
else
{
propertyType = pi.PropertyType;
}
DataColumn dc = new DataColumn(pi.Name, propertyType);
if (pi.CanRead)
{
dt.Columns.Add(dc);
}
}
return dt;
}
public static DataTable ToDataTable<T>(IEnumerable<T> items)
{
var table = CreateDataTableForPropertiesOfType<T>();
PropertyInfo[] piT = typeof(T).GetProperties();
foreach (var item in items)
{
var dr = table.NewRow();
for (int property = 0; property < table.Columns.Count; property++)
{
if (piT[property].CanRead)
{
dr[property] = piT[property].GetValue(item, null);
}
}
table.Rows.Add(dr);
}
return table;
}
}
Таким образом, вы могли бы написать следующее, чтобы преобразовать данные к DataTable:
IEnumerable<Thing> values = GetMyIEnumerableValues();
var tableOfData = IEnumerableToDataTable.ToDataTable(values);
После того, как она есть, это довольно тривиальным записать его в файл CSV или любой другой формат по вашему выбору, поскольку все «сложные» работы по отражению для извлечения данных из IEnumerable<T>
были выполнены.
Я решил проблему подобную, как вы просили. Как у вас есть IEnumerable
IEnumerable<TaskSheetHead> taskSheetHead = new TaskSheetHeadService().GetEmployeeTimesheet(entity);
Так что, если вы хотите сделать первенствовать от этого просто создать учебное пособие
var workbook = new HSSFWorkbook();
var sheet = workbook.CreateSheet();
И итерацию с сквозными, а затем добавить его в таблицу
foreach (TaskSheetHead taskSheethead in taskSheetHead)
{
//decimal totalTask = decimal.Zero;
//double totalTime = 0;
foreach (TaskSheet taskSheet in taskSheethead.TaskSheets)
{
var row2 = sheet.CreateRow(rowNumber++);
row2.CreateCell(0).SetCellValue(taskSheethead.Date.ToString("MMMM dd, yyyy"));
row2.CreateCell(1).SetCellValue(taskSheet.Task.Project.ProjectName + ":" + taskSheet.Task.Title + "-" + taskSheet.Comment);
row2.CreateCell(2).SetCellValue(taskSheet.ExpendedHour);
row2.CreateCell(3).SetCellValue(taskSheet.IsBilledToClient);
//totalTask += 1;
//totalTime += taskSheet.ExpendedHour;
}
var row3 = sheet.CreateRow(rowNumber++);
row3.CreateCell(0).SetCellValue("");
row3.CreateCell(1).SetCellValue("");
row3.CreateCell(2).SetCellValue("");
row3.CreateCell(3).SetCellValue("");
}
Здесь у меня есть еще один дочерний список, поэтому я выполнил итерацию с использованием внутреннего цикла. Сделайте свой выбор.
Вам нужен он для экспорта на лету? если нет, то подумайте о сохранении в формате csv – ULysses
Вам нужно экспортировать в файл Excel или CSV быть приемлемым? – Rob
Этот вид зависит от T :) – SWeko