Untitled
unknown
plain_text
2 years ago
2.9 kB
21
Indexable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using ClosedXML.Excel;
namespace ImportExcelUsingClosedXML
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//Persons
var person = ImportExcel<Product>(Environment.CurrentDirectory + "\\Data\\person.xlsx", "Persons");
//Products
//var products = ImportExcel<Product>(Environment.CurrentDirectory + "\\Data\\Products.xlsx", "Products");
}
// viet ham va class duoi nay
public List<T> ImportExcel<T>(string excelPath, string sheetName)
{
List<T> list = new List<T>();
Type typeOfObject = typeof(T);
using (IXLWorkbook workbook = new XLWorkbook(excelPath))
{
var worksheet = workbook.Worksheets.Where(w => w.Name == sheetName).First();
var properties = typeOfObject.GetProperties();
//header colume text
var colums = worksheet.FirstRow().Cells().Select((v, i) => new { value = v.Value, Index = i + 1 }); // index trong closedXml bắt đầu bằng 1 chứ ko phải bắt đầu =0
foreach(IXLRow row in worksheet.RowsUsed().Skip(1)) // skip đầu dùng làm header rồi
{
T obj = (T)Activator.CreateInstance(typeOfObject);
foreach (var prop in properties)
{
int colIndex = colums.SingleOrDefault(c => c.value.ToString() == prop.Name.ToString()).Index;
var val = row.Cell(colIndex).Value;
var type = prop.PropertyType;
prop.SetValue(obj, Convert.ChangeType(val, type)); // dang lỗi chổ này
}
list.Add(obj);
}
}
return list;
}
}
public class Product
{
public string Name { get; set; }
public decimal price { get; set; }
public int Units { get; set; }
}
public class Person
{
public string Name { get; set; }
public string LastName { get; set; }
public string Street { get; set; }
public string State { get; set; }
public string Zip { get; set; }
}
}
Editor is loading...
Leave a Comment