我用"select * from [" + "Sheet1" + "$]" 来做为对EXCEL工作表的操作。但现在问题来了,客户想随时改变工作表的名字,比如他想用时间来命名工作表。如:用08.07.17代替“Sheet1”,那么我现在应该怎么办呢?怎么样获取excel文件的第一张工作表的名字,然后取代“Sheet1”呢?

解决方案 »

  1.   

    先获取所有Sheets,然后访问Sheets[0],
      

  2.   

    读取EXCEL表信息            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='f:\\2222.xls';Extended Properties=Excel 8.0";
                OleDbConnection conn = new OleDbConnection();
                conn.ConnectionString = strConn;
                conn.Open();            DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                conn.Close();
                dataGridView1.DataSource = dt;
                dataGridView1.Refresh();Table_Name列为表名
      

  3.   


    我没有看到Table_Name,也没有看到sheet名字啊?
      

  4.   

    好。我已经看到Table_Name列下的“Sheet1$”,我想得到“Sheet”,应该怎么做?
      

  5.   

    dt.Rows[0][2].ToString().Trim();得到"Sheet1$",为什么会有$ 的呢?
      

  6.   

    附加美元符号 ($) 的 Excel 对象名称代表工作表(例如,Sheet1$),而没有美元符号的普通对象名称代表 Excel 指定的范围。
      

  7.   

    为什么我还真的不知道,不过你就用这个名字肯定就对了,要不然你用OLEDB该问EXCEL工作表,还是要在表名后面加上$的。
      

  8.   

    如下这样就可以了。不用根据表名,而是根据数组获取
    命名空间:  Microsoft.Office.Tools.Excel
    程序集:  Microsoft.Office.Tools.Excel(在 Microsoft.Office.Tools.Excel.dll 中)
    下面的代码示例使用 Worksheets 属性使当前工作簿中的第二个工作表不可见。private void HideSecondWorksheet()
    {
        Excel.Worksheet worksheet = (Excel.Worksheet)this.Worksheets[2];
        worksheet.Visible = Excel.XlSheetVisibility.xlSheetHidden;
    }