2012-11-15 4 views
0

아래 코드를 사용하여 Excel 파일의 모든 데이터를 선택하고 행 3에서 시작하여 파일 내의 나머지 데이터를 읽을 수 있는지 궁금합니다. ..파일 데이터를 데이터 테이블로 변환

excelConnectionString ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFileName + ";Extended Properties=Excel 12.0"; 
      // Create Connection to Excel Workbook 
      using (OleDbConnection excelConnection = 
       new OleDbConnection(excelConnectionString)) 
       {      
        excelConnection.Open(); 
        System.Data.DataTable dt = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
        string[] excelSheet = new String[dt.Rows.Count]; 
        int sheet = 0; 
        foreach (DataRow row in dt.Rows) 
        { 
         excelSheet[sheet] = row["Table_Name"].ToString(); 
         sheet++; 

        } 
        excelDataTable.Clear(); 
        for (int i = 0; i < excelSheet.Length; i++) 
        { 
         OleDbCommand command = new OleDbCommand 
          ("Select * FROM [" + excelSheet[i] + "]", excelConnection); 

         excelAdapter.SelectCommand = command; 
         excelAdapter.Fill(excelDataTable); 
        } 
        excelConnection.Close(); 
       } 

      return excelDataTable; 
+0

파일에 헤더가 있습니까? – Derek

+0

아니요.하지만 나중에 다른 측면에 사용해야하는 데이터입니다. – user1776590

답변

0
당신은되어 OleDbConnection으로 읽기 전에 파일을 ammend이 같은 것을 사용할 수

: -

private string customiseTemplate(string filename) 
    { 
     try 
     { 
      //Create Instance of Excel Appllication 
      Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); 

      //Create a WorkBook Object. 
      Workbooks wbks = app.Workbooks; 

      //Populate Workbook from Excel File. 
      _Workbook _wbk = wbks.Add(filename); 

      //Create Sheet Object. 
      Sheets shs = _wbk.Sheets; 

      //Determine which sheet to work with. In this instance there should only ever be one. 
      _Worksheet _wsh = (_Worksheet)shs.get_Item(1); 



      //Delete Unwanted Rows 1 to 3. 

      Microsoft.Office.Interop.Excel.Range 
      range1 = (Range)_wsh.get_Range("A1:A3", Missing.Value); 

      range1.EntireRow.Delete(Missing.Value); 

      // Release Range 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(range1); 

      //Save WorkBook. 

      app.AlertBeforeOverwriting = false; 

      string newFile = filename.Insert(3, "Ammended_"); 

      _wbk.SaveAs(newFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Missing.Value, 
      Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, 
      Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 

      // CLose Excel App. 
      app.Quit(); 

      // Release unnecessary excel processes 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(app); 
      app = null; 

      return newFile; 

     } 
     catch(Exception x) 
     { 
      MessageBox.Show(x.Message); 
     } 

     return null; 

    } 
+0

필요에 따라 행을 삭제하지 마십시오. – user1776590

+0

DataTable에서 필요하지 않으면 무엇이 필요합니까? – Derek

+0

항상 데이터를 읽은 다음 DataTable에서이 세 행을 제거 할 수 있습니다. Table.Rows [0] .Delete(); 위의 예는 새 파일을 저장하는 것으로 이전 파일을 대체하지 않습니다. – Derek

0
var w = sqlData.AsEnumerable().Where(data => data.Field<String>("slideNo") == "5") 
       .Select(data=> data.Field<String>("QuestionStartText")); 

이 ...

0 코딩에 대한 답변입니다
0

데릭이 맞습니다. 나는 그에 동의합니다. 여전히 원본 Excel 데이터 파일을 유지하고 데이터 테이블에 일부만 표시하려면 먼저 Excel 데이터를 전체 Excel 데이터로 내 보낸 다음 데이터 테이블에서 필요없는 행을 삭제해야합니다. 행이 필요하지 않은 경우 원래 Excel 파일에서 원하지 않는 행을 먼저 삭제 한 다음 excel을 datatable로 내보낼 수 있습니다.

관련 문제