2017-10-27 5 views
2

"SP $"라는 Excel 시트에서 첫 번째 열의 값을 검색하려고합니다.OleDB를 사용하여 Excel 시트 (확장명이 .xlsm 인 파일)에서 첫 번째 열의 값 검색

string path = @"C:\Users\atsurkanu\Desktop" + @"\TemplateClientExtraction_IDEAFIMIT_Conero_QUARTER_20170127.xlsm"; 
string connectionString = string.Format(@"provider=Microsoft.ACE.OLEDB.12.0;data source={0};Extended Properties=Excel 12.0;", path); 
string sheetName = "SP$"; 

이 같은 일부 코드 :

나는 경로가

using (OleDbConnection con = new OleDbConnection(connectionString)) 
     { 
      try 
      {     
       var dataTable = new DataTable(); 

       con.Open(); 
       var tableschema = con.GetSchema("Tables"); 
       var firstsheet = tableschema.Rows[0]["SP$"].ToString(); 
       string name_query = "SELECT A4 FROM [" + firstsheet + "]"; 
       OleDbDataAdapter da = new OleDbDataAdapter(name_query, con); 
       da.Fill(dataTable); 
       con.Close(); 

을하지만 그것은 작동하지 않습니다. 제발, 고양이가 Excel 시트에서 첫 번째 열을 검색하는 방법을 말해주십시오.

업데이트 : 나는 그것이 어떻게 작동하는지 확실하지 오전하지만 도움 :

var dataTable = new DataTable(); 

       con.Open(); 
       var tableschema = con.GetSchema("Tables"); 

       // To get the first sheet name you use the first row and the column named TABLE_NAME 
       var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString(); 

       string name_query = "SELECT F1 FROM [" + "SP$" + "] WHERE F1 <> ''"; 
       OleDbDataAdapter da = new OleDbDataAdapter(name_query, con); 
       da.Fill(dataTable); 

       foreach (DataRow dataRow in dataTable.Rows) 
       { 
        foreach (var item in dataRow.ItemArray) 
        { 
         listWithElementsFromSPfirstColumn.Add((string)item); 
        } 
       } 
+0

정확히 작동하지 않는 기능은 무엇입니까? 오류/예외가 있습니까? – andrews

+0

A4 및 SP $는 무엇입니까? 검색 할 셀과 표로 사용할 시트 이름을 나타 냅니까? – Steve

+0

A4 - 데이터 검색을 시작하려는 호출의 이름입니다 (A4 -> A5 -> A6). 이유는 A1, A2, A3이 비어 있기 때문입니다. SP $ - 스프레드 시트의 시트 이름입니다. 또한 이름, 비용, 건물 등의 시트가 있습니다. –

답변

0

당신은 "A4"를 사용은 OleDb 엑셀의 행/열 규칙을 이해하고 희망 할 수 없다. OleDb의 경우 시트는 DataTable이며이를로드하거나 WHERE 조건을 제공하여 검색 할 행을 필터링해야합니다.

시트에 HEADER가 있는지 여부는 확실하지 않습니다. HDR = NO 또는 HDR = YES 키를 연결 문자열에 추가해야합니다. 헤더가 누락 된 경우 OleDb는 F1, F2, F3 등으로 열 이름을 자동으로 지정합니다. 그래서 당신은 이제

using (OleDbConnection con = new OleDbConnection(connectionString)) 
{ 
    try 
    {     
     var dataTable = new DataTable(); 

     con.Open(); 
     var tableschema = con.GetSchema("Tables"); 

     // To get the first sheet name you use the first row and the column named TABLE_NAME 
     var firstsheet = tableschema.Rows[0]["TABLE_NAME"].ToString(); 

     string name_query = "SELECT F1 FROM [" + firstsheet + "] WHERE F1 <> ''"; 
     OleDbDataAdapter da = new OleDbDataAdapter(name_query, con); 
     da.Fill(dataTable); 
    } 
    catch ..... 
} 

당신까지 데이터 테이블을 읽고 (열 F1의 콘텐츠를 사용하는 것입니다 같은 것을 사용하여 시트를 조회하거나 열 A의 헤더에 F1을 변경할 수 있습니다 Excel 용 열)