2009-08-20 6 views
2

Ich habe ein Problem. Ich muss den Namen des Excel-Arbeitsblatts in einem Arbeitsbuch ablegen, das auf der ganz linken Seite der Arbeitsmappe angezeigt wird - der erste aus meiner Sicht.Erlangung des ersten Excel-Blatt-Name mit OleDbConnection

ich diesen Code verwende:

public static string GetFirstExcelSheetName(OleDbConnection connToExcel) 
{ 
    DataTable dtSheetName = 
    connToExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
    List<String> lstExcelSheet = new List<string>(dtSheetName.Rows.Count); 

    foreach (DataRow row in dtSheetName.Rows) 
     lstExcelSheet.Add(row["TABLE_NAME"].ToString()); 

    return lstExcelSheet[0]; 
} 

Das Problem hier ist es die Zeilen nicht in der visuellen Tab-Reihenfolge zurückkehrt, aber in einer ganz anderen Reihenfolge - höchstwahrscheinlich die Reihe Erstellungsdatum.

Wie kann es möglich sein, die Tabellenname Tabelle entsprechend ihrer Tab-Reihenfolge sortiert zu bekommen, so dass ich leicht den ersten Excel-Blatt-Namen bekommen kann?

Danke, kalem keki

Antwort

1

Es sollte das nullte Element in der Arbeitsmappe (?) Sammlung. Ich denke, Sie haben den richtigen Index, falsche Sammlung.

Entschuldigung, habe nicht bemerkt, dass Sie die Zeilensammlung einer Datentabelle verwenden. Das ist ein anderes Problem. Wie erstellen Sie die Datentabelle? Möglicherweise müssen Sie die Sortiereigenschaft der Datenansicht ändern.

+0

I diese Leitung verwenden, um die Tabellen-Daten-Tabelle zu erhalten: Table dtSheetName = connToExcel.GetOleDbSchemaTable (OleDbSchemaGuid.Tables, null); – pencilCake

+0

check out http://support.microsoft.com/kb/309488 Ich denke, dass Sie Ihren zweiten Parameter von null auf den Namen des Arbeitsblatts oder Null ändern können, um die Tabellen zu begrenzen, die an Ihr Ziel zurückgegeben werden – Beth

1
Dim dtSheetnames As DataTable = oleDBExcelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"}) 
Dim FirstSheetName As String = dtSheetnames.Rows(0)!TABLE_NAME.ToString 
0

Ich empfehle die NPOI Bibliothek (http://npoi.codeplex.com/) statt OleDB zum Abrufen von Daten (einschließlich Metadaten) von Excel.

IIRC, schlägt OleDB auch für Blattnamen fehl, die Leerzeichen oder Dollarzeichen enthalten.

0
OleDbConnection oconn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Session["path"].ToString() + "; Extended Properties=Excel 12.0;Persist Security Info=False;"); 

      oconn.Open(); 
      myCommand.Connection = oconn; 
      DataTable dbSchema = oconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
      if (dbSchema == null || dbSchema.Rows.Count < 1) 
      { 
       throw new Exception("Error: Could not determine the name of the first worksheet."); 
      } 
      string firstSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString(); 
1

Die Zeile 0 nicht das erste Blatt in der Excel-Datei ist, werden Zeilen nach alphabetischer Reihenfolge in dieser Sammlung sortiert:/

Verwandte Themen