C# 读取excel

最近在弄excel读写,在网上搜了很多例子,有的会有点问题,经过修改后,这个函数是可以使用,提供给大家。

写博客的目的就是为了激发别人也写下,这样才能让大家搜到更多有用的资料。


注意:

////////////////////////////////////////////////////////////////////////////////////////////////////////////
//要想获取excel中全部内容,最好在excel中将全部内容是设置为字符型(目前我是强制将excel内容都设置为了字符型)
//参考:https://blog.csdn.net/fupei/article/details/5886058

////////////////////////////////////////////////////////////////////////////////////////////////////////////


        /// <summary>
        /// 获取excel内容
        /// </summary>
        /// <param name="strExcelPath"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static DataTable GetExcelTableByOleDB(string strExcelPath, string tableName)
        {
            try
            {
                DataTable dtExcel = new DataTable();
                //数据表
                DataSet ds = new DataSet();
                //获取文件扩展名
                string strExtension = System.IO.Path.GetExtension(strExcelPath);
                string strFileName = System.IO.Path.GetFileName(strExcelPath);
                //Excel的连接
                OleDbConnection objConn = null;
                switch (strExtension)
                {
                    case ".xls":
                        objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=2;\"");
                        break;
                    case ".xlsx":
                        objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=2;\"");
                        break;
                    default:
                        objConn = null;
                        break;
                }
                if (objConn == null)
                {
                    return null;
                }
                objConn.Open();

                //获取Excel中所有Sheet表的信息
                System.Data.DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
                bool bHadPage = false;//检查是否有这个表
                //获取Excel的第一个Sheet表名
                for (int i = 0; i < schemaTable.Rows.Count; i++)
                {
                    string tableNameTmp = schemaTable.Rows[i][2].ToString().Trim();
                    if (tableNameTmp == tableName + "$")
                    {
                        //有这个表
                        bHadPage = true;
                    }
                }

                if (!bHadPage)
                {
                    //没有这个表
                    objConn.Close();
                    return null;
                }
                //string tableName = schemaTable.Rows[0][2].ToString().Trim();
                //string strSql = "select * from [" + tableName + "]";

                string strSql = "select * from [" + tableName + "$]";
                //获取Excel指定Sheet表中的信息
                OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
                OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
                myData.Fill(ds, tableName);//填充数据
                objConn.Close();

                //dtExcel即为excel文件中指定表中存储的信息
                dtExcel = ds.Tables[tableName];
                return dtExcel;
            }
            catch (Exception ex)
            {
                ShareMem.SetMessage("获取Excel文件失败:" + ex.Message);
                ShareMem.SetMessage("请尝试安装安装目录下DLL\\AccessDatabaseEngine.rar文件");

                return null;
            }
        }


猜你喜欢

转载自blog.csdn.net/cyd411/article/details/80074808