工作时间太紧张了,现在终于可以闲下来一会了。继续写WinForm 对EXCEL 的操作的方法分享给大家吧。昨天写得是获取SHEET名称,今天就写一下获取SHEET数据的方法吧。即数据导出:

方法1:

View Code
 1         public static DataTable ExcelData(string FileName, string SheetName)
2 {
3 DataSet ds = new DataSet();
4 DataTable dt = null;
5 try
6 {
7 string strXls = FileName.Substring(FileName.LastIndexOf(".")).ToLower();
8 string sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties=Excel 8.0;";
9 OleDbConnection oleConn = new OleDbConnection();
10 oleConn.ConnectionString = sConn;
11 oleConn.Open();
12 OleDbCommand cmd = new OleDbCommand("select * from [" + SheetName + "$]", oleConn);
13 OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
14 adp.Fill(ds, "[" + SheetName + "$]");
15 dt = ds.Tables[0];
16 }
17 catch (System.Exception e)
18 {
19 string s = e.ToString();
20 }
21 return dt;
22 }

  

方法2:

View Code
 1         public static DataTable DaTaFromExcel(string FileName, string SheetName)
2 {
3 try
4 {
5 DataTable dt = new DataTable();
6 Microsoft.Office.Interop.Excel.ApplicationClass myExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
7 Microsoft.Office.Interop.Excel.Workbook xBk; //工作薄
8 Microsoft.Office.Interop.Excel.Worksheet xSt; //工作Sheet
9 Missing miss = Missing.Value;
10
11 xBk = myExcel.Workbooks.Open(FileName, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss);
12 xSt = (Microsoft.Office.Interop.Excel.Worksheet)xBk.Sheets[SheetName];
13 int colcount = xSt.UsedRange.Columns.Count;
14 int rowcount = xSt.UsedRange.Rows.Count;
15
16 for (int i = 1; i <= colcount; ++i) dt.Columns.Add(xSt.Cells[1, i].ToString());
17
18 for (int i = 2; i <= rowcount; ++i)
19 {
20 DataRow dr = dt.NewRow();
21 for (int j = 1; j <= colcount; ++j) dr[j - 1] = xSt.Cells[i, j].ToString();
22 dt.Rows.Add(dr);
23 }
24
25 return dt;
26 }
27 catch (System.Exception e)
28 {
29 string s = e.Message.ToString();
30 return null;
31 }
32
33 }

 在上面两种方法中在执行效率上,还是方法1由于不需要加载EXCEL 的COM组件占有了很大优势。但是在导出SHEET数据过程中,有可能由于SHEET数据的个个字段的数据类型,导致导出的数据不能正常识别。致使方法返回的DataTabale数据为空。方法2在避免了这情况发现。

不足之处,还请大家不吝赐教。谢谢!!!

作者: Aland.liu 发表于 2011-07-22 11:45 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"