asp.net 将Excel中某个工作簿的数据导入到DataTable方法

时间:2021-06-21 20:42:51

       最近在网上看了几篇将Excel中某个工作簿的数据导入到DataTable的文章,自己总结了一套最实用的方法。

       这里需要注意的是:从Excel的导入到DataTable时,Excel的第一行数据会导入成DataTable的字段,所以

       Excel的第一行最好可以为空或者标识数据。

       添加引用:

       using System.Data.OleDb;

       using System.IO;

       调用如下:

       DataTable dt = GetExcelData("D:\\Data.xls", "sheet1");

       方法如下:

        /// <summary>
        /// 获取指定路径、指定工作簿名称的Excel数据
        /// </summary>
        /// <param name="FilePath">文件存储路径</param>
        /// <param name="WorkSheetName">工作簿名称</param>
        /// <returns>如果争取找到了数据会返回一个完整的Table,否则返回异常</returns>
        public DataTable GetExcelData(string FilePath, string WorkSheetName)
        {
            DataTable dtExcel = new DataTable();
            OleDbConnection con = new OleDbConnection(GetExcelConnection(FilePath));
            OleDbDataAdapter adapter = new OleDbDataAdapter("Select * from [" + WorkSheetName + "$]", con);
            //读取
            con.Open();
            adapter.FillSchema(dtExcel, SchemaType.Mapped);
            adapter.Fill(dtExcel);
            con.Close();
            dtExcel.TableName = WorkSheetName;
            //返回
            return dtExcel;
        }

        /// <summary>
        /// 获取链接字符串
        /// </summary>
        /// <param name="strFilePath"></param>
        /// <returns></returns>
        public string GetExcelConnection(string strFilePath)
        {
            if (!File.Exists(strFilePath))
            {
                throw new Exception("指定的Excel文件不存在!");
            }
            return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFilePath + ";Extended properties=\"Excel 8.0;Imex=1;HDR=Yes;\"";
            //@"Provider=Microsoft.Jet.OLEDB.4.0;" +
            //@"Data Source=" + strFilePath + ";" +
            //@"Extended Properties=" + Convert.ToChar(34).ToString() +
            //@"Excel 8.0;" + "Imex=1;HDR=Yes;" + Convert.ToChar(34).ToString();
        }