C#如何循环读取Excel表中的每一个单元格?

解决方案 »

  1.   

    学习,不知道用DATASET能行不???
      

  2.   

    private DataTable getTable()
    {
        try
        {//        path即是excel文档的路径。        string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= Path"+";Extended Properties=Excel 8.0;";        //Sheet1为excel中表的名字
            string sql = "select * from ["Sheet1$]";
            OleDbCommand cmd = new OleDbCommand(sql, new OleDbConnection(conn));
            OleDbDataAdapter ad = new OleDbDataAdapter(cmd);
            DataSet ds = new DataSet();
            ad.Fill(ds);              
            return ds.Tables[0];
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return null;
        }
    }
      

  3.   

    如果只是读纪录把EXCEL作为一个数据表
    用SQL来查询,这个是最简单的
      

  4.   

    如果你读取到DGV中,直接用OLEDB去读取就好了//读取Excel
            public void ReadExcel()
            {
                //创建一个数据链接
                string strCon = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source  =d:\\XXX.xls;Extended properties=Excel 8.0";
                OleDbConnection myConn = new OleDbConnection(strCon);
                string strCom = " SELECT * FROM [Sheet1$] ";
                myConn.Open();
                //打开数据链接,得到一个数据集
                OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
                //得到自己的DataSet对象
                myCommand.Fill(ds, "[Sheet1$]");
                //关闭此数据链接
                myConn.Close();
            }
      

  5.   

    同志们!!!!必须得是获取excel表 循环表中的每一个单元格
      

  6.   

            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                            "Extended Properties=Excel 8.0;" +
                            "data source=f:\\Excel\\excel.xls";
            try
            {
                OleDbDataAdapter dr = new OleDbDataAdapter("select * from [Sheet1$]", connStr);
                DataSet dt = new DataSet();            dr.Fill(dt);
                foreach (DataRow row in dt.Tables[0].Rows)
                {
                    for (int i = 0; i < dt.Tables[0].Columns.Count; i++)
                    {
                        Response.Write(row[i].ToString()+",");
                    }
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
                return;
            }
      

  7.   

     大哥:dr.Fill(dt); 如果excel单元格不是字符串是其他类型 读不出来。
    不用 OLEDB 直接读表 怎么解决?谢谢。(网上找的代码有点乱,看不懂)
      

  8.   

    把字符串更新为如下就可以啦:
    connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                            "Extended Properties='Excel 8.0;HDR=NO;IMEX=1;';" +
                            "data source=f:\\Excel\\excel.xls;";
      

  9.   

     把字符串的连接改为:string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + "Extended Properties=Excel 8.0 Xml;HDR=NO"; 
    这个我在office2007中试验过,是对的
      

  10.   

    HSL888谢谢啦!现在的问题是select * from [Sheet1$]表名不是Sheet1怎么解决。
    如果你知道怎么读表中的单元格一块解决吧!谢谢啦!
      

  11.   

    你工作表的名是什么那么Sheet1就代表什么
      

  12.   

    如果想从工作表中循环取出表并循环表中的每个单元格 就如下:
            string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                            "Extended Properties='Excel 8.0;HDR=NO;IMEX=1;';" +
                            "data source=f:\\Excel\\excel.xls;";
            try
            {
                OleDbConnection cn = new OleDbConnection(connStr);
                cn.Open();
                DataTable Table_Name = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                cn.Close();
                foreach (DataRow row_table in Table_Name.Rows)
                {
                    string TabelName = row_table["Table_Name"].ToString();//表名
                    Response.Write("表:" + TabelName + "<br/>");
                    OleDbDataAdapter dr = new OleDbDataAdapter("select * from [" + TabelName + "]", connStr);
                    DataSet dt = new DataSet();                dr.Fill(dt);
                    string str = "";
                    foreach (DataRow row in dt.Tables[0].Rows)
                    {
                        for (int i = 0; i < dt.Tables[0].Columns.Count; i++)
                        {
                            str += row[i].ToString() + ",";
                        }
                    }
                    Response.Write(str + "<br/>");
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
                return;
            }
      

  13.   

    public void RederExcel(string PfileName)
            {
                Microsoft.Office.Interop.Excel.Application AExcelApp = null;
                Microsoft.Office.Interop.Excel.Workbook AWorkBook = null;
                object missing = System.Reflection.Missing.Value;
                AExcelApp = new Microsoft.Office.Interop.Excel.Application();
                if (!System.IO.File.Exists(PfileName))
                {
                    Console.WriteLine("Excel文件不存在!", "错误");
                    Console.Read();
                }
                else
                {
                    AWorkBook = AExcelApp.Workbooks.Open  (PfileName, missing, true, missing, missing, missing
                            , missing, missing, missing, missing, missing, missing, missing, missing, missing);                AExcelApp.Visible = true;
                    Microsoft.Office.Interop.Excel.Worksheet AWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)AWorkBook.ActiveSheet; //取得当前活动的Sheet 
                    //_WorkSheet = (Excel.Worksheet)_WorkBook.Sheets["name"];            //取得指定名字的Sheet
                                   for (int i = 0; i < AWorkSheet.Rows.Count; i++)
                    {
                       
                        for (int j = 0; j < AWorkSheet.Columns.Count; j++)
                        {
                            Microsoft.Office.Interop.Excel.Range Arange = (Microsoft.Office.Interop.Excel.Range)AWorkSheet.Cells[i + 1, j + 1];
                            if (Arange.Value2 != null)
                            {
                                string s = Arange.Value2.ToString();
                            }
                            
                        }
                       
                    }
                    AExcelApp.Quit();
                    AExcelApp = null;
    }
      

  14.   

    就这几种方式   1  通过数据库,  2 通过com(如14楼)  知道方法 就可以自己 google了  这样 学习起来比较深刻
      

  15.   

    获取Range(可以是一个单元格,也可以是多个单元格),然后获取Value2属性即可