如何使用oledb c#知道哪个excel表是空的?

时间:2013-10-21 03:02:53

标签: c# oledb

我获得的是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);
}

2 个答案:

答案 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);
}

答案 1 :(得分:0)

您可以将它们排除在添加之外。

我使用此代码过滤掉空白页。结果 它们是用户不应访问的工作表。

您可以通过两种方式解决此问题。

一个。忽略他们

湾放下床单。

我强烈建议和前者一起去。

使用此代码;

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