C#读取Excel表格中数据并返回datatable

来源:互联网 发布:青铜器 软件 编辑:程序博客网 时间:2024/04/30 04:12

在软件开发的过程中,经常用到从excel表格中读取数据作为数据源,以下整理了一个有效的读取excel表格的方法。

 DataTable GetDataTable(string tableName,string leftTopCel,string rightbutCel)        {            bool hasTitle = false;            OpenFileDialog openFile = new OpenFileDialog();            openFile.Filter = "Excel(*.xlsx;*.xls)|*.xlsx;*.xls|所有文件(*.*)|*.*";            openFile.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);            openFile.Multiselect = false;            if (openFile.ShowDialog() == DialogResult.Cancel) return null;            var filePath = openFile.FileName;            string fileType = System.IO.Path.GetExtension(filePath);            if (string.IsNullOrEmpty(fileType)) return null;            using (DataSet ds = new DataSet())            {                string strCon = string.Format("Provider=Microsoft.Jet.OLEDB.{0}.0;" +                                "Extended Properties=\"Excel {1}.0;HDR={2};IMEX=1;\";" +                                "data source={3};",                                (fileType == ".xls" ? 4 : 12), (fileType == ".xls" ? 8 : 12), (hasTitle ? "Yes" : "NO"), filePath);                string strCom = " SELECT * FROM [" + tableName + "$" + leftTopCel + ":" + rightbutCel + "]  ";                using (OleDbConnection myConn = new OleDbConnection(strCon))                using (OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn))                {                    myConn.Open();                    myCommand.Fill(ds);                }                if (ds == null || ds.Tables.Count <= 0) return null;                return ds.Tables[0];            }        }

tableName是该表表格的名称 如:Sheet1leftTopCel是左上角单元格名称,如:A1rightbutCel是右上角单元格名称,如:B13

同时需要引入命名空间 

using System.Data;
using System.Data.OleDb;


理论上,该方法支持所有excel表格,但是在实际的使用过程中,我们发现,这只支持xls格式的,所以如果对xlsx的文件如果打开失败的话,可以尝试把xlsx文件另存问xls格式,再重新打开。


原创粉丝点击