正在做項目,同事問道有啥簡單的方法讀取excel到DataTable里面呢?
想也不想直接回到NPOI呀,我覺得滿不錯的,同事說太麻煩了,要不你找找看。反正手上的項目做的差不多的,習慣性的打開google,感覺已經有了LinqToXml,那LinqToExcel呢?沒成想一搜出來了.
地址:https://code.google.com/p/linqtoexcel/

在使用之前:
1.添加引用
LinqToExcel.dll
Remotion.Data.Linq.dll
2.添加命名空間
using LinqToExcel;
//取得數據,只需要一行代碼 var execelfile = new ExcelQueryFactory(excelfilename.xls);
如何取到相應的表呢?
//緊接樓上 var tsheet = excelfile.Worksheet(0);
此時得到是沒有進行相應映射的(row)行列集合.
一個簡單的查詢:
var excelfile = new ExcelQueryFactory("1.xls");
var tsheet = excelfile.Worksheet(0);
//查詢30歲以上的人的名字
var query = from p in tsheet
where p["Age"].Cast<int>() > 30
select p;
foreach (var item in query)
{
Console.WriteLine("Name is {0}",item[0].Value.ToString());
}
Console.Read();
查詢結果:

那如何轉成相應的實體集合呢?
class Program
{
static void Main(string[] args)
{
var excelfile = new ExcelQueryFactory("1.xls");
//用另一種方法取得實體數據集
var tsheet = excelfile.Worksheet<Person>(0);
var query = from p in tsheet
where p.Age > 30
select p;
foreach (var item in query)
{
Console.WriteLine("Name is {0}", item.Name);
}
Console.Read();
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }
public Person() { }
public Person(string _name, int _age, string _address)
{
this.Name = _name;
this.Age = _age;
this.Address = _address;
}
}
結果:

這里需要注意的一點:

表頭名字如果是英文,(區分大小寫)必須與屬性名保持一致,要不然會報錯的----支持中文屬性名和表頭
如果將得到的數據集綁定到控件的時候,請最后轉List集合:
Winform示例:
后台代碼:

前台效果:

總結:感覺這個庫文件用起來簡單,實用,操作方便,而且結合了Linq的查詢特性,excel版本不僅支持03,而且連wps表格都支持(后綴名為.et),csv文件更不在話下了。
附上相關的鏈接:
google code:https://code.google.com/p/linqtoexcel/
github:https://github.com/paulyoder/LinqToExcel
download:https://code.google.com/p/linqtoexcel/downloads/detail?name=LinqToExcel_1.7.0.zip&can=2&q=
