Untitled

 avatar
unknown
plain_text
a year ago
2.9 kB
18
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