2009-08-20 126 views
2

我有一個問題。我需要在工作簿中找到Excel工作表名稱,該工作簿從最左邊的工作表標籤中查看 - 從我的角度來看第一個工作表。用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]; 
} 

這裏的問題是它返回未在視覺Tab鍵順序,但在一個非常不同的順序行 - 最有可能的行創建日期。

怎樣才能根據tab標籤順序得到sheetnames表,這樣我就可以輕鬆獲得第一張excel表名?

感謝, Kalem案keki

回答

1

它應該是在工作簿中的零個項(?)集合。 我認爲你有正確的索引,錯誤的收集。

對不起,沒有注意到你正在使用數據表的行集合。 這是一個不同的問題。 你如何創建數據表? 您可能必須更改數據視圖的排序屬性。

+0

我使用此行得到表數據表: 的DataTable dtSheetName = connToExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null); – pencilCake 2009-08-20 14:54:54

+0

檢出http://support.microsoft.com/kb/309488 我認爲你可以將你的第二個參數從null更改爲工作表的名稱或零,以限制返回到目標的表 – Beth 2009-08-20 16:37:23

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

我推薦使用NPOI庫(http://npoi.codeplex.com/)而不是OleDB從Excel中檢索數據(包括元數據)。

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文件中的第一片材​​,行由按字母順序排列此集合中的排序:/

相關問題