获取xls excel文件中的工作表数量

时间:2012-02-14 11:18:33

标签: c# .net excel xls

如何获取文件中的工作表数量

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

现在我想知道一边有多少工作表

我应该写什么代码?

我怎么知道?

谢谢

1 个答案:

答案 0 :(得分:2)

虽然Haris Hasan指出的问题将允许您提取工作表名称,但如果您只想要工作簿中的工作表数量,则以下方法可以解决问题:

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();
    }
}