zoukankan      html  css  js  c++  java
  • C#读取Excel表格中数据并返回datatable

    在软件开发的过程中,经常用到从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是该表表格的名称 如:Sheet1
    leftTopCel是左上角单元格名称,如:A1
    rightbutCel是右上角单元格名称,如:B13

    同时需要引入命名空间 

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

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

  • 相关阅读:
    CF | Alyona and Mex
    ACM | HDU|6227_Rabbit
    计蒜客 | 拓扑排序 | 虎威山上的分配
    ACM Secrete Master Plan
    map————两个数组的交集(2)
    set 集合————两个数组的交集
    哈希表、数组————有效的字母异位词
    贪心算法,双指针————分发饼干
    堆————数据流的第k个大的元素
    容器————priority_queue
  • 原文地址:https://www.cnblogs.com/CoderAyu/p/8490127.html
Copyright © 2011-2022 走看看