2013-10-21 22 views
0

我得到Excel表格名稱,但只是有數據的表格。如何使用oledb c#知道哪些excel表單爲空?

String fpath = "Provider=Microsoft.ACE.OLEDB.12.0; data source=" +tbpath.Text+ ";Extended Properties='Excel 12.0 Xml;HDR=YES';"; 
file = new OleDbConnection(fpath); 
file.Open(); 
dt = file.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

if (dt == null) 
{ 
    //return null; 
} 
cbsheet.Enabled = true; 
//String[] excelSheets = new String[dt.Rows.Count]; 
//int i = 0; 

// Add the sheet name to the string array. 
foreach (DataRow row in dt.Rows) 
{ 
    if (row["TABLE_NAME"].ToString().Contains("$"))//checks whether row contains '_xlnm#_FilterDatabase' or sheet name(i.e. sheet name always ends with $ sign) 
    { 
     cbsheet.Items.Add(row["TABLE_NAME"].ToString()); 
    } 
} 

//return excelSheets; 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("ERROR: "+ex); 
} 
+0

我複製了你的代碼。我只獲得了包含數據的表單。我重新命名了第二張紙,現在即使它不包含任何數據,我仍然可以獲得該紙張 –

+0

我只需要使用數據表。 – user2901626

+0

您是否需要代碼建議的表單或表單名稱中的數據? –

回答

0

你可以檢查每片行即

try 
{ 
    foreach (DataRow row in dt.Rows) 
    { 
     if (row["TABLE_NAME"].ToString().Contains("$")) 
     { 
      OleDbCommand cmd = new OleDbCommand(
       "select * from [" + row["TABLE_NAME"].ToString() + "]", file); 

      using (DbDataReader dr = cmd.ExecuteReader()) 
      { 
       if (dr.HasRows) 
       { 
        cbsheet.Items.Add(row["TABLE_NAME"].ToString()); 
       } 
       dr.close(); 
      } 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("ERROR: "+ex); 
} 
+0

它不起作用,總是顯示我所有的工作表也是空的工作表。 – user2901626

+0

它適用於我...再試一次 –

0

用戶可於獲取添加排除。

我用這段代碼過濾掉了空的工作表。變成 他們是不應該被用戶訪問的工作表。

你可以用兩種方法解決這個問題。

a。忽略它們

b。放下牀單。

我強烈建議跟前者一起去。

使用此代碼;

if (!dt.Rows[i]["Table_Name"].ToString().Contains("FilterDatabase") && !dt.Rows[i]["Table_Name"].ToString().EndsWith("$'")) 
{ 
} 
相關問題