public ArrayList ExcelSheetName(string filepath)
        {
            ArrayList al = new ArrayList();
            string strConn;
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  filepath + ";Extended Properties=Excel 8.0;";
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            DataTable sheetNames = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            conn.Close();
            foreach (DataRow dr in sheetNames.Rows)
            {
                al.Add(dr[2]);
            }
            return al;
        }
为何遍历后 总多表名呢?例如 原表为 (表一$,表二$) 遍历后为(表一$,表一$_,表二$,表二$_)在线等解决 谢谢

解决方案 »

  1.   

    参考我写的excel操作:
    http://download.csdn.net/source/3034170
    上面是源文件,稍后整理下源码。
      

  2.   


            private void toolStripLabel1_Click(object sender, EventArgs e)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "Excel文件(*.xls;*.xlsx)|*.xls;*.xlsx";
                ofd.Multiselect = false;
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    xlsname = ofd.FileName;
                    toolStripComboBox1.Enabled = true;
                    toolStripStatusLabel1.Text = "已经选择Excel文件: "+xlsname;
                    toolStripComboBox1.Items.Clear();
                    using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + xlsname + ";Extended Properties='Excel 12.0;HDR=NO;IMEX=1';"))
                    {
                        conn.Open();
                        DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        foreach (DataRow dr in dt.Rows)
                        {
                            //我将excel的工作表名放入了ComboBox中
                            toolStripComboBox1.Items.Add(dr["TABLE_NAME"]);
                        } 
                    }
                }
            }
      

  3.   

    你提取出来表比实际的多,尝试这样操作看看:
                               //先清除数组所有元素,然后遍历添加元素
                  al.Clear();
                foreach (DataRow dr in sheetNames.Rows)
                {
                    al.Add(dr[2]);
                }
      

  4.   

    我有3个表 提取出来的sheetNames.Rows 数量为 6
    你的代码我试过了 也是提取出来六个表 但是 不存在的表名不同了 我的是_ 你的是例外一个名
      

  5.   

    可以调试一下,看看你取出表名之后sheetNames表是什么样的数据,还有你al数组的数据是不是正常,或者是怎么不正常了。
      

  6.   

               ArrayList al = new ArrayList();
                string strConn;
                strConn ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filepath+";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";
                OleDbConnection conn = new OleDbConnection(strConn);
                conn.Open();
                DataTable sheetNames =conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null,null, "TABLE" });         
       conn.Close();
                foreach (DataRow dr in sheetNames.Rows)
                {
                    int i=dr["TABLE_Name"].ToString().IndexOf('$')+1;                if (i < dr["TABLE_Name"].ToString().Length)
                    {
                        string str = dr["TABLE_Name"].ToString().Substring(0, i);
                        al.Add(str);
                    }
                }
      

  7.   

    谢谢 大家 问题解决了 thanks