در این مقاله مروری سریع و کاربردی خواهیم داشت بر تواناییهای مقدماتی LinqToExcel
در ابتدا میبایست LinqToExcel را از طریق NuGet به پروژه افزود.
و یا از طریق solution Explorer گزینه Manage NuGet Packages
در صورتیکه بخواهیم انتقال اطلاعات فایل اکسل به جداول بانک اطلاعاتی مانند Sql Server بطور مثال با روش EF Entity Framework را انجام دهیم کلاس زیر با نام person را فرض نمایید.
باید بدانید که بصورت پیشفرض سطر اول از فایل اکسل به عنوان نام ستون انتخاب میشود و میبایست جهت نگاشت با نام propertyهای کلاس ما دقیقاً همنام باشد.
اگر فایل اکسل ما ستونهای بیشتری داشته باشد تنها ستونهای همنام با propertyهای کلاس ما به کلاس نگاشت پیدا میکند و سایر ستونها نادیده گرفته میشود.
در صورتیکه نام ستونهای فایل اکسل(سطر اول) با نام propertyهای کلاس یکسان نباشد جهت نگاشت آنها در کلاس میتوان از متد AddMapping استفاده نمود.
در کدهای بالا در صورتی که sheetName قید نشود بصورت پیشفرض Sheet1 از فایل اکسل انتخاب میشود.
همچنین میتوان از اندیس جهت مشخص نمودن Sheet مورد نظر استفاده نمود که اندیسها از صفر شروع میشوند.
توسط متد GetWorksheetNames می توان نام sheetها را بدست آورد.
و توسط متد GetColumnNames می توان نام ستونها را بدست آورد.
همانطور که میبینید با روش توضیح داده شده در این مقاله به راحتی از فرامین Linq مانند where میتوان در انتخاب اطلاعات از فایل اکسل استفاده نمود و سپس نتیجه را به جداول مورد نظر انتقال داد.
در ابتدا میبایست LinqToExcel را از طریق NuGet به پروژه افزود.
PM> Install-Package LinqToExcel
اکنون فایل اکسل ذیل را در نظر بگیرید.
روش خواندن اطلاعات از فایل اکسل فوق تحت فرامین Linq و با مشخص کردن نام sheet مورد نظر توسط شئ ExcelQueryFactory بصورت زیر است.
string pathToExcelFile = @"C:\Users\MASOUD\Desktop\ExcelFile.xlsx"; var excel = new ExcelQueryFactory(pathToExcelFile); string sheetName = "Sheet1"; var persons = from a in excel.Worksheet(sheetName) select a; foreach (var a in persons) { MessageBox.Show(a["Name"]+" "+a["Family"]); }
در صورتیکه بخواهیم انتقال اطلاعات فایل اکسل به جداول بانک اطلاعاتی مانند Sql Server بطور مثال با روش EF Entity Framework را انجام دهیم کلاس زیر با نام person را فرض نمایید.
public class Person { public string Name { get; set; } public string Family { get; set; } }
string pathToExcelFile = @"C:\Users\MASOUD\Desktop\ExcelFile.xlsx"; var excel = new ExcelQueryFactory(pathToExcelFile); string sheetName = "Sheet1"; var persons = from a in excel.Worksheet<Person>(sheetName) select a; foreach (var a in persons) { MessageBox.Show(a.Name+" "+a.Family); }
در صورتیکه نام ستونهای فایل اکسل(سطر اول) با نام propertyهای کلاس یکسان نباشد جهت نگاشت آنها در کلاس میتوان از متد AddMapping استفاده نمود.
string pathToExcelFile = @"C:\Users\MASOUD\Desktop\ExcelFile.xlsx"; var excel = new ExcelQueryFactory(pathToExcelFile); string sheetName = "Sheet1"; excel.AddMapping("Name","نام"); excel.AddMapping("Family", "نام خانوادگی"); var persons = from a in excel.Worksheet<Person>(sheetName) select a; foreach (var a in persons) { MessageBox.Show(a.Name+" "+a.Family); }
در کدهای بالا در صورتی که sheetName قید نشود بصورت پیشفرض Sheet1 از فایل اکسل انتخاب میشود.
var persons = from a in excel.Worksheet<Person>() select a;
var persons = from a in excel.Worksheet<Person>(0) select a;
public IEnumerable<string> getWorkSheets() { string pathToExcelFile = @"C:\Users\MASOUD\Desktop\ExcelFile.xlsx"; var excel = new ExcelQueryFactory(pathToExcelFile); return excel.GetWorksheetNames(); }
var SheetColumnNames = excel.GetColumnNames(sheetName);