2009-08-20 6 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]; 
} 

문제는 여기가 아니라 시각적 인 탭 순서에 있지만 아주 다른 순서로 행을 반환하는 것입니다 :

이 코드를 사용하고 있습니다.

첫 번째 Excel 시트 이름을 쉽게 얻을 수 있도록 탭 순서에 따라 시트 이름 테이블을 정렬하려면 어떻게해야합니까?

감사합니다, Kalem 사건의 판결의 keki는

답변

1

이 통합 문서에서 제로 번째 항목 (?) 수집해야합니다. 올바른 색인, 잘못된 컬렉션이 있다고 생각합니다.

죄송합니다. 귀하가 데이터 테이블의 행 모음을 사용하고있는 것을 확인하지 못했습니다. 다른 문제입니다. 데이터 테이블을 어떻게 만듭니 까? 데이터 뷰의 sort 속성을 변경해야 할 수도 있습니다.

+0

는 I 이블 데이터 테이블을 획득하기 위해이 라인을 사용 = connToExcel.GetOleDbSchemaTable (OleDbSchemaGuid.Tables, null); – pencilCake

+0

체크 아웃 http://support.microsoft.com/kb/309488 두 번째 매개 변수를 null에서 워크 시트의 이름으로 변경하거나 0을 사용하여 대상으로 반환되는 테이블을 제한 할 수 있다고 생각합니다. – 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

나는 엑셀에서 (메타 데이터 포함) 데이터를 검색하는 대신 인 OleDB보다 NPOI 라이브러리 (http://npoi.codeplex.com/)를 사용하는 것이 좋습니다.

IIRC, OleDB는 공백이나 달러 기호가 포함 된 시트 이름에도 실패합니다. 로우 0 엑셀 파일의 첫 번째 시트 아니다

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

는 행이 집합의 순으로 정렬되어 DataTable을 dtSheetName/

관련 문제