2013-10-21 32 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("$'")) 
{ 
} 
相关问题