2009-08-20 5 views
2

問題が1つあります。私はワークブックの中のシート名を取得する必要があります。これは左端のシートタブを見ています。私の視点からは最初のものです。OleDbConnectionで最初のExcelシート名を取得する

私はこのコードを使用しています:

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]; 
} 

ここでの問題は、それがないのビジュアルタブ順序ではなく、非常に異なる順序で行を返すされている - おそらく行が作成された日付。

シート名の表をタブ順に並べると、どのようにして1番目のExcelシート名を簡単に取得できるのでしょうか?

おかげで、 kalemのkeki

答えて

1

それはワークブックにゼロ番目の項目でなければなりません(?)のコレクション。 あなたは正しいインデックス、間違ったコレクションを持っていると思います。

申し訳ありませんが、データテーブルの行コレクションを使用していることを確認していません。 これは別の問題です。 どのようにデータテーブルを作成しますか? データビューのソートプロパティを変更する必要があります。

+0

Iが表データテーブルを取得するためにこのラインを使用: データテーブルdtSheetName = connToExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables、null); – pencilCake

+0

チェックアウトhttp://support.microsoft.com/kb/309488 2番目のパラメータをnullからワークシート名に変更するか、ゼロをターゲットに戻すことを制限することができると思います – 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

私は、Excelから(メタデータを含む)のデータを取得するために、むしろのOleDBよりNPOIライブラリ(http://npoi.codeplex.com/)を使用することをお勧めします。

IIRCでは、空白またはドル記号を含むシート名にもOleDBが失敗します。

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

行0は、行がこのコレクションにアルファベット順でソートされ、Excelファイル内の最初の用紙がありません:/

関連する問題