C# 读取Excel中的数据

         #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的时候,会自动处理表头。

时间: 2024-10-03 20:32:07

C# 读取Excel中的数据的相关文章

C#如何读取Excel中的数据

#region 读取Excel中的数据 02./// <summary> 03./// 读取Excel中的数据 04./// </summary> 05./// <param name="excelFile">Excel文件名及路径,EG:C:\Users\JK\Desktop\导入测试.xls</param> 06./// <returns>Excel中的数据</returns> 07.private DataT

asp.net读取excel中的数据并绑定在gridview

 这篇文章主要介绍了asp.net读取excel中的数据并绑定在gridview上的方法,需要的朋友可以参考下       前台label,DropDownList,gridview控件 aspx.cs核心代码: 代码如下: using System.Data.OleDb;//需要引入命名 public void Excel_Click(object sender, EventArgs e) { if (this.AttachmentFile.Value == "" &&

c++-读取Excel中字段数据,格式为日期,但读出来与表格中日期不一样

问题描述 读取Excel中字段数据,格式为日期,但读出来与表格中日期不一样 if(ret.vt==VT_DATE) //时间格式 { SYSTEMTIME st; VariantTimeToSystemTime((long)&ret.date, &st); CString date; date.Format("%d/%d/%d %d:%d:%d",st.wYear,st.wMonth, st.wDay,st.wHour,st.wMinute,st.wSecond,st.

asp.net读取excel中的数据并绑定在gridview_实用技巧

前台label,DropDownList,gridview控件 aspx.cs核心代码: 复制代码 代码如下: using System.Data.OleDb;//需要引入命名 public void Excel_Click(object sender, EventArgs e) { if (this.AttachmentFile.Value == "" && this.Label1.Text == "" && DropDownLis

PHPExcel读取EXCEL中的图片并保存到本地的方法

 这篇文章主要介绍了PHPExcel读取EXCEL中的图片并保存到本地的方法,本文直接给出代码实例,需要的朋友可以参考下     HPExcel是相当强大的 MS Office Excel 文档生成类库,当需要输出比较复杂格式数据的时候,PHPExcel 是个不错的选择. 经过认真研究API文档和查看官方文档,终于找到读取EXCEL中的图片,目前我只能读取excel 2003格式的.excel2007貌似还不支持. 其中主要使用的API为PHPExcel_Worksheet,PHPExcel_W

ASP.NET中如何用程序将excel中的数据导入到数据库中(C#)

问题描述 ASP.NET中如何用程序将excel中的数据导入到数据库中(C#),比较不同的时,excel只有一个表,里面是全部的详细信息,导入到sqlserver中的是多个表,这个如何实现?希望有具体的例子! 解决方案 解决方案二:大致原理:先将EXCEL导入GridView,然后再操作GridView中的数据存入数据库相应表中!在这里不能给你提供原码了,但你可以在Google内收到很多!解决方案三:用的是vs.net2003啊,应该如何?解决方案四:以下是我的一个真实的例子,供参考!<tr>

arraylist-急 在线等 谢谢!java想要读取excel中某以特定单元格的值,现在是循环读出所有的值,请帮忙修改一下

问题描述 急 在线等 谢谢!java想要读取excel中某以特定单元格的值,现在是循环读出所有的值,请帮忙修改一下 package com.excel.action; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java

读取excel去除重复数据,然后在存入数据库

问题描述 读取excel去除重复数据,数据量比较大,考虑执行效率问题,求大神给出最好解决方案 解决方案 解决方案二:如果你没有技术讨论,那么请把帖子发到"项目外包"论坛.免费"求"人,是一点诚意也没有的.解决方案三:你好!你可以在先Excel里面去除重复,再数据导入!这种方法不行吗?解决方案四:在查询Excel的时候直接去掉不行吗?和在数据库中一样用distinct解决方案五:可用第三方dll读取excel数据后进行去重然后存放到数据库中.aspose.cells读

导入-在poi读取excel的合并数据时,怎么判断合并了多少行以及怎么取值

问题描述 在poi读取excel的合并数据时,怎么判断合并了多少行以及怎么取值 类似于上面的导入格式怎么读数据 解决方案 参考这个EXCEL中如何用VBA判断某一地址单元格是否为合并单元格然后把vba转成你自己的语言http://wenku.baidu.com/link?url=nsc0K4oKljjsvfVayJIXT9q2oNcWMwgjRghQdCqOPPJaH_Zm0UNgwqRKRdmC5PypqxvKwIDBgRV7i8W9sxiR0_KhBR78e6b6vTenaoVEE-7