Untitled
unknown
plain_text
a year ago
7.3 kB
6
Indexable
using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Reflection; 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 List<Person> persons = ImportExcel5<Person>(Environment.CurrentDirectory + "\\Data\\person.xlsx", "Persons"); // Now 'products' contains the data from the Excel file foreach (var person in persons) { Console.WriteLine($"Name: {person.Name}, Lastname: {person.LastName}, State: {person.State}, Street: {person.Street}"); } //Products List<Product> products = ImportExcel5<Product>(Environment.CurrentDirectory + "\\Data\\Products.xlsx", "Products"); // Now 'products' contains the data from the Excel file foreach (var product in products) { Console.WriteLine($"Name: {product.Name}, Price: {product.Price}, Units: {product.Units}"); } } // viet ham va class duoi nay // hàm này ok public List<T> ImportExcel5<T>(string excelPath, string sheetName) where T : new() { List<T> dataList = new List<T>(); using (XLWorkbook workbook = new XLWorkbook(excelPath)) { IXLWorksheet worksheet = workbook.Worksheet(sheetName); if (worksheet != null) { var columnNames = worksheet.FirstRow().CellsUsed().Select(c => c.Value.ToString()).ToList(); for (int i = 2; i <= worksheet.LastRowUsed().RowNumber(); i++) { T obj = new T(); for (int j = 1; j <= worksheet.LastColumnUsed().ColumnNumber(); j++) { PropertyInfo propertyInfo = typeof(T).GetProperty(columnNames[j - 1]); if (propertyInfo != null) { var cell = worksheet.Cell(i, j); try { // Check if the cell is empty if (!cell.IsEmpty()) { // Handle conversion based on the property type if (propertyInfo.PropertyType == typeof(decimal)) { // Handle decimal conversion var stringValue = cell.Value.ToString(); var convertedValue = Convert.ToDecimal(stringValue, CultureInfo.InvariantCulture); propertyInfo.SetValue(obj, convertedValue); } else if (propertyInfo.PropertyType == typeof(double)) { // Handle double conversion var stringValue = cell.Value.ToString(); var convertedValue = Convert.ToDouble(stringValue, CultureInfo.InvariantCulture); propertyInfo.SetValue(obj, convertedValue); } else { // Use Convert.ChangeType for other types var convertedValue = Convert.ChangeType(cell.Value.ToString(), propertyInfo.PropertyType); propertyInfo.SetValue(obj, convertedValue); } } } catch (Exception ex) { // Handle conversion errors Console.WriteLine($"Error converting value '{cell.Value}' to type '{propertyInfo.PropertyType}': {ex.Message}"); } } } dataList.Add(obj); } } } return dataList; } // hàm này đang lỗi 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); // dang bị lỗi chổ change type 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 decimal Price2 { get; set; } public string Name2 { get; set; } public string Name3 { get; set; } public string Name4 { 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