2017-09-20 10 views
2

두 개의 Excel 워크 시트가로드됩니다. 두 행 모두 정확히 1 행에서 동일한 헤더를 가지고 있습니다. 둘 다 동일한 코드를 사용하고 있습니다.OLEDB를 사용하여로드 된 두 개의 Excel 테이블이 거의 같습니다. 하나는 헤더와 하나가 없습니다.

이제 두 번째 파일의 머리글을 얻었고 첫 번째 머리글은 없습니다.

코드 :

private static string GetExcelConnectionString(string Filename){return "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + Filename + ";Extended Properties = \"Excel 12.0 Xml;HDR=YES\"";} 

    private static void AddToListByOLE(string Filename, ref System.Collections.Generic.List<System.Data.DataTable> MyList, int nTab = -1) 
    { 
     string sql = string.Empty; 
     using (System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(GetExcelConnectionString(Filename))) 
     { 
      using (System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter()) 
      { 
       System.Data.DataTable dt = new System.Data.DataTable(); 
       using (System.Data.OleDb.OleDbCommand command = cn.CreateCommand()) 
       { 
        cn.Open(); 
        System.Data.DataTable dtSchema = cn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 

        string firstSheetName = dtSchema.Rows[0].Field<string>("TABLE_NAME"); 

        sql = "SELECT * FROM [" + firstSheetName + "]"; 
        command.CommandText = sql; 
        adapter.SelectCommand = command; 
        adapter.Fill(dt); 

        if (dt.Rows.Count == 0) 
        { 
         System.Data.OleDb.OleDbDataReader reader = command.ExecuteReader(); 
         dt.Load(reader); 
        } 
        cn.Close(); 

        MyList.Add(dt); 
       } 
      } 
     } 
    } 

Imput - 모두 엑셀 통합 문서가 중복 표시 : Both excel workbooks - overlapped displayed

연결 문자열 : First worksheet imported - no header

: 첫번째 수입 (DataTable의에서, 헤더)의 Used connection string

결과

두 번째 가져 오기 결과 (헤더로 올바른 가져 오기) : Second worksheet imported - with header

아무도 아이디어가 있습니까? 나는 절대적으로 같은 연결 문자열 (파일 이름 제외)을 사용하여 루프에서이 파일을로드하고 같은 기능을 사용하므로 실제로 아이디어가 없습니다.

는, 사전에 감사 J.

+0

헤더가없는 워크 시트의 연결 문자열을'HDR = No'로 변경해야합니다. HDR은 Header! –

+0

고맙습니다.하지만 해결책은 아닙니다. 이제 두 파일 모두 헤더가 없습니다. 나는 datatable의 컬럼을 엑셀 시트의 헤더로 명명하고 싶다. – Jan021981

+0

질문을 만족스럽게 표시하는 올바른 방법은 대답을 수락하는 것입니다. 제목을 변경하지 마십시오. –

답변

0

미안 해요. 파일을 열어 다른 시간에 저장했습니다. 가져 오기가 작동하지 않았습니다. 어쩌면이 파일은 이전 형식이었습니다. EM @ il을 통해 파일을 받았습니다.