2012-02-14 39 views
-1

如何讓得到XLS片的數量excel文件

string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName); 

現在我想有多少工作表文件知道工作表側多少給?

我應該寫什麼代碼?

我怎麼知道?

感謝

+0

看到這個http://stackoverflow.com/questions/1164698/using-excel-oledb-to-get-sheet-names-in-sheet-order – 2012-02-14 11:24:36

回答

2

雖然問題指向哈里斯·哈桑將允許你提取表名稱,如果你只是想工作表的工作簿中的數量,下面將做的伎倆:

string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName); 
int numberOfSheets = 0; 

using (OleDbConnection conn = new OleDbConnection(connectionString)) 
{ 
    conn.Open(); 

    DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

    if (dt != null) 
    { 
     foreach (DataRow row in dt.Rows) 
     { 
      if (row["TABLE_NAME"].ToString().EndsWith("$")) 
      { 
       numberOfSheets++; 
      } 
     } 
    } 
} 

編輯:

或者,對於較短的版本,使用以下(感謝JB爲助人爲樂摹我在這一個):

string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName); 
int numberOfSheets = 0; 

using (OleDbConnection conn = new OleDbConnection(connectionString)) 
{ 
    conn.Open(); 

    DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

    if (dt != null) 
    { 
     numberOfSheets = dt.AsEnumerable().Cast<DataRow>().Where(row => row["TABLE_NAME"].ToString().EndsWith("$")).Count(); 
    } 
} 
+0

如果你想爲了減少代碼,你可以使用'dt.Rows.Where(row => row [「TABLE_NAME」] .ToString()。EndsWith(「$」))。Count()' – 2012-05-06 19:52:17

+0

@jb。我的組織仍然停留在.Net 2.0的黑暗時代,所以我對這些較新的方法的瞭解並不是很好,但我確信'DataRowCollection'沒有'Where()'方法。我已經讀過,要做你正在做的事情,需要在'DataTable'上使用'AsEnumerable()'。如果我錯了,請糾正我。 – 2012-05-06 20:28:39

+0

看起來像我們都是對的。你可以做的是這個:'dt.Rows.AsQueryable()。Cast ().Where(row => row [「TABLE_NAME」] .ToString()。EndsWith(「$」))。Count(); ' – 2012-05-06 20:34:48