C#获取Excel的正确方法

            对于不同的Excel版本,有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎)。  

Jet 引擎,可以访问 Office 97-2003,但不能访问 Office 2007

ACE 引擎,既可以访问 Office 2007,也可以访问 Office 97-2003。

另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。
所以,在使用不同版本的office时,要注意使用合适的引擎。

获取excel数据:

public System.Data.DataTable ExcelToDS(string Path)
        {
            System.Data.DataTable dt = null;
            DataSet ds = null;
            try
            {
                //filetype="xls"
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties= 'Excel 8.0;HDR=Yes;'";
                OleDbConnection conn = new OleDbConnection(strConn);
                conn.Open();
                string strExcel = "";
                System.Data.DataTable midDt = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
                OleDbDataAdapter myCommand = null;
                //获得excel第一个表的名称
                string tablename = midDt.Rows[0]["Table_Name"].ToString();
                strExcel = string.Format("select * from [{0}]", tablename);
                myCommand = new OleDbDataAdapter(strExcel, strConn);
                ds = new DataSet();
                myCommand.Fill(ds, "table1");
                dt = ds.Tables["table1"];
            }
            catch (Exception ex)
            {
                throw;
            }
            return dt;
        }

下面这里再放上获取CSV格式的excel(CSV重量级轻,实用性比较好)

public static DataTable GetTableFromCsv(string csvPath)
        {
            System.Data.DataTable dt = new System.Data.DataTable();
            FileStream fs = new FileStream(csvPath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            //Unicode存储,列之间使用tab间隔
            //StreamReader sr = new StreamReader(fs, new System.Text.UnicodeEncoding());
            //utf - 8存储,使用逗号间隔
            StreamReader sr = new StreamReader(fs, new System.Text.UTF8Encoding());
            //记录每次读取的一行记录
            string strLine = "";
            //记录每行记录中的各字段内容
            string[] aryLine;
            //标示列数
            int columnCount = 0;
            //标示是否是读取的第一行
            bool IsFirst = true;

            //逐行读取CSV中的数据
            while ((strLine = sr.ReadLine()) != null)
            {
                //aryLine = strLine.Split('\t');
                aryLine = strLine.Split(',');
                if (IsFirst == true)
                {
                    IsFirst = false;
                    columnCount = aryLine.Length;
                    //创建列
                    for (int i = 0; i < columnCount; i++)
                    {
                        DataColumn dc = new DataColumn(aryLine[i]);
                        dt.Columns.Add(dc);
                    }
                }
                else
                {
                    DataRow dr = dt.NewRow();
                    for (int j = 0; j < columnCount; j++)
                    {
                        dr[j] = aryLine[j];
                    }
                    dt.Rows.Add(dr);
                }
            }

            sr.Close();
            fs.Close();
            return dt;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值