首先,我已经获取到一张Excel表;例如(D:/Excel1.xls)然后,我需要遍历这张表的所有工作表最后,遍历以后没有此工作表名的,就自动创建一个还有,并将指定的一张工作表明内容复制与新创建的工作表中还有,如何遍历指定一张工作表的列的每一行,然后获取每一行的值。
真的很急啊~~各位前辈,请出手相助,给个范例也行!跪求了!在线真心等!

解决方案 »

  1.   

    把Excel里的数据转成DataTable,给你找个代码哈
      

  2.   

            private void button1_Click(object sender, EventArgs e)
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.Filter = "Excel文件(*.xls)|*.xls|Excel2007文件(*.xlsx)|*.xlsx";
                openFileDialog1.FilterIndex = 1;
                openFileDialog1.RestoreDirectory = true;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    if (openFileDialog1.FileName == "")
                    {
                        MessageBox.Show("没有选择Excel文件!无法进行数据导入");
                        return;
                    }
                    EcxelToDataGridView(openFileDialog1.FileName, dataGridView1);
                }
            }        public void EcxelToDataGridView(string filePath, DataGridView dgv)
            {
                try
                {
                    string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + " ;Extended Properties=Excel 8.0";
                    System.Data.OleDb.OleDbConnection myConn = new System.Data.OleDb.OleDbConnection(strCon);
                    myConn.Open();
                    DataTable sheetNames = myConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    ArrayList al = new ArrayList();
                    foreach (DataRow dr in sheetNames.Rows)
                    {
                        al.Add(dr[2]);
                    }
                    string bm = al[0].ToString();
                    string strCom = " SELECT * FROM " + "[" + bm + "]";
                    System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, myConn);
                    System.Data.DataTable dt = new System.Data.DataTable();
                    myCommand.Fill(dt);
                    this.dataGridView1.DataSource = dt;
                    myConn.Close();
                }
                catch
                {
                    try
                    {
                        string strCon = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + @" ;Extended Properties=""Excel 12.0;HDR=YES;""";
                        System.Data.OleDb.OleDbConnection myConn = new System.Data.OleDb.OleDbConnection(strCon);
                        myConn.Open();
                        DataTable sheetNames = myConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        ArrayList al = new ArrayList();
                        foreach (DataRow dr in sheetNames.Rows)
                        {
                            al.Add(dr[2]);
                        }
                        string bm = al[0].ToString();
                        string strCom = " SELECT * FROM " + "[" + bm + "]";
                        System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, myConn);
                        System.Data.DataTable dt = new System.Data.DataTable();
                        myCommand.Fill(dt);
                        this.dataGridView1.DataSource = dt;
                        myConn.Close();
                    }
                    catch
                    {
                        MessageBox.Show("文件可能已被其他应用程序占用或者文件格式不兼容");
                    }
                }
                int hs = 0;
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    DataGridViewRowHeaderCell rowHeaderCell = dataGridView1.Rows[i].HeaderCell;
                    hs++;
                    rowHeaderCell.Value = hs.ToString();
                }
                dataGridView1.Parent = this;
                dataGridView1.Visible = false;
                MessageBox.Show("导入成功");
                button2.Enabled = true;
            }
      

  3.   

    给你代码了,自己稍微做修改就可以用了,支持.xls和新的XLSX格式
      

  4.   

    然后用dataGridView.Rows[i].Cells[j].Value.ToString()
      

  5.   

    //将Excel文件写入DataTable
            protected DataTable CallExcel(string filepath)
            {
                try
                {
                    OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0");
                    con.Open();
                    string sql = "select * from [Sheet1$]";//选择第一个数据SHEET
                    OleDbDataAdapter adapter = new OleDbDataAdapter(sql, con);
                    DataTable dt = new DataTable();
                    adapter.Fill(dt);
                    con.Close();
                    con.Dispose();
                    return dt;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("打开Excel文件时:" + ex.Message, "提示");
                    return null;
                }
            }
    //遍历
    DataTable dt = CallExcel(fName);
                        if (dt == null) return;
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            string number = dt.Rows[i][2].ToString();
                            string name = dt.Rows[i][1].ToString();
                            if (Regex.IsMatch(number, @"^1[358]\d{9}$", RegexOptions.IgnoreCase))
                            {
                                InsertToList(number, name);
                            }
                        }
    OleDbConnection这个要去找下引用的DLL,引用一下
      

  6.   

    谢谢楼上两位!!!还有一个不解之题别人都是using Excel;为什么我只能用using Microsoft.Office.Interop.Excel;我发现我这里会引起很多控件都会报错
      

  7.   

    我现在用这个操作Excel,读取没问题,写入没试过。
    http://download.csdn.net/detail/tongiii/3697976
      

  8.   

    個人覺得這個最方便
    http://ufo-crackerx.blog.163.com/blog/static/113078778201201542333900/
      

  9.   

    怎么样获取Excel的所有sheet啊?我是用 using Excel命名空间做的!