2015-10-22 6 views
1

Я хочу создать метод для получения имен всех листов в книге. В моей книге 7 листов. Если я хочу читать и сохранять имена листов в переменной excelSheets, я получаю 9 имен, где два имени отвечают на несуществующие листы («списки $» и «TYPAB»).Как получить имена всех листов в excel

Я не понимаю, где проблема? Как я могу получить имена только существующие листы?

public List<string> NamesOfSheets(string filename) 
    { 
     string con = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties='Excel 12.0;HDR=Yes;'"; 
     using (OleDbConnection connection = new OleDbConnection(con)) 
     { 
      connection.Open(); 

      List<string> excelSheets; 

      try 
      { 
       DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

       excelSheets = dt.Rows.Cast<DataRow>() 
        .Select(i => i["TABLE_NAME"].ToString()).ToList(); 

       return excelSheets; 
      } 
      catch (Exception) 
      { 
       throw new Exception("Failed to get SheetName"); 

      } 
     } 
    } 

ответ

1

Оскар, спасибо за вашу помощь, но офис interlop не решить мою проблему. Я обнаружил, что «списки $» - это скрытый лист, поэтому только имя TYPAB не отвечает ни на один существующий лист.

Поэтому я добавил предложение, где и проблема решена.)

public List<string> NamesOfSheets(string filename) 
    { 
     string con = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties='Excel 12.0;HDR=Yes;'"; 

     List<string> excelSheets; 

     using (OleDbConnection connection = new OleDbConnection(con)) 
     { 
      connection.Open(); 

      try 
      { 
       DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

       excelSheets = dt.Rows.Cast<DataRow>() 
        .Where(i => i["TABLE_NAME"].ToString().EndsWith("$") || i["TABLE_NAME"].ToString().EndsWith("$'")) 
        .Select(i => i["TABLE_NAME"].ToString()).ToList(); 

       return excelSheets; 
      } 
      catch (Exception) 
      { 
       throw new Exception("Failed to get SheetName"); 
      } 
     } 
    } 
Смежные вопросы