C# 读取Excel中的数据

简介: #region 读取Excel中的数据 /// <summary> /// 读取Excel中的数据 /// </summary> /// <param name="excelFile">Excel文件名及路径,EG:C:\Users\JK\Desktop\导入测试.xl
         #region 读取Excel中的数据
        /// <summary> 
        /// 读取Excel中的数据
        /// </summary> 
        /// <param name="excelFile">Excel文件名及路径,EG:C:\Users\JK\Desktop\导入测试.xls</param> 
        /// <returns>Excel中的数据</returns> 
        private DataTable GetTable(string fileName)
        { 
            OleDbConnection objConn = null;
            System.Data.DataTable dt = null;
            string connString = string.Empty;
            OleDbDataAdapter da = new OleDbDataAdapter();
            //获取Excel工作薄中Sheet页(工作表)名集合
            String[] ss = this.GetExcelSheetNames(fileName);
            DataTable dataTable = new DataTable();   
            try
            {               
                string FileType = fileName.Substring(fileName.LastIndexOf("."));
                if (FileType == ".xls")
                    connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                       "Data Source=" + fileName + ";Extended Properties=Excel 8.0;";
                else//.xlsx
                    connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
                // 创建连接对象 
                objConn = new OleDbConnection(connString);
                // 打开数据库连接 
                objConn.Open();
               
                string sql_F = "Select * FROM [{0}]";
                for (int i = 0; i < ss.Length;i++ )
                {
                    da.SelectCommand = new OleDbCommand(String.Format(sql_F, ss[i].ToString() + "$"), objConn);
                    da.Fill(dataTable);
                    MessageBox.Show("第"+i+"次表中数据量="+dataTable.Rows.Count.ToString());
                }
                dataTable = DeleteBlank(dataTable,9);
                MessageBox.Show("删除空行后,表中数据量=" + dataTable.Rows.Count.ToString());
                return dataTable;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return null;
            }
            finally
            {
                // 清理 
                if (objConn != null)
                {
                    objConn.Close();
                    objConn.Dispose();
                }
                if (dt != null)
                {
                    dt.Dispose();
                }
            }           
        }

        #endregion
         #region  删除指定表中的空白行
        /// <summary>
        ///删除指定表中的空白行 
        /// </summary>
        /// <param name="dt">表名</param>
        /// <param name="ColNum">Excel中的列数</param>
        /// <returns>删除空白行后的DataTable</returns>
        private DataTable DeleteBlank(DataTable dt,int ColNum)
        {
            if (dt == null || dt.Rows.Count==0)
            {
                return dt;
            }
            //删除其中的空行(注意for循环的形式)
            for (int i = dt.Rows.Count - 1; i >= 0; i--)
            {
                DataRow row = dt.Rows[i];
                bool flag = true;
                //当某行的ColNum列,均为空时,改行为空
                for (int j = 0; j < ColNum; j++)
                {
                    object o = row[j];
                    if (o != DBNull.Value && Convert.ToString(o).Trim().Length > 0)
                    {
                        flag = false;
                        break;
                    }
                }
                if (flag)
                {
                    dt.Rows[i].Delete();                 
                }
            }
            dt.AcceptChanges();
            //把行中DBNull列替换成空字符串
            for (int k = dt.Rows.Count - 1; k >= 0; k--)
            {
                DataRow row = dt.Rows[k];
                for (int z = 0; z < ColNum; z++)
                {
                    object o = row[z];
                    if (o == DBNull.Value)
                    {
                        if (dt.Columns[z].DataType == typeof(string))
                        {
                            row[z] = "";
                        }
                    }
                }
            }
            dt.AcceptChanges();
            return dt;
        }
        #endregion

小注:

读取Excel的时候,会自动处理表头。


相关文章
|
16天前
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
46 0
|
28天前
|
安全 Java 数据库连接
jdbc解析excel文件,批量插入数据至库中
jdbc解析excel文件,批量插入数据至库中
19 0
|
1月前
|
Java API Apache
使用AOP+反射实现Excel数据的读取
使用AOP+反射实现Excel数据的读取
|
1月前
|
开发框架 .NET C#
C#数据去重的这几种方式,你知道几种?
C#数据去重的这几种方式,你知道几种?
|
2月前
|
SQL 开发框架 .NET
EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用
EntityFramework数据持久化复习资料3、C#拓展方法与yield关键字使用
21 0
|
1月前
|
SQL 数据可视化 数据处理
使用SQL和Python处理Excel文件数据
使用SQL和Python处理Excel文件数据
51 0
|
24天前
|
SQL C# 数据库
C# 读取多条数据记录导出到 Word 标签模板
C# 读取多条数据记录导出到 Word 标签模板
|
24天前
|
安全 数据处理 C#
C# Post数据或文件到指定的服务器进行接收
C# Post数据或文件到指定的服务器进行接收
|
24天前
|
存储 SQL C#
C#实现Excel合并单元格数据导入数据集
C#实现Excel合并单元格数据导入数据集
|
28天前
|
安全 Java 数据库连接
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
153 0