2016-06-16 2 views
0

아래 코드를 Excel에서 DataGridview로 가져 오는 코드가 있습니다. 하지만 난 단지 하나의 열에 아래로 수직으로 정렬 된 헤더입니다 첫 번째 행 싶어요. 여기에 코드가 있습니다. 내가 dtExcel.Rows[0][0].ToString(); 같은 것을 사용하여 시도했지만 작동하지 않습니다. 누군가가 왜 나에게 이것을 말해 줄 수 있습니까?DataGridview로 Excel에서 헤더를 가져 오는 방법?

 private void button1_Click(object sender, EventArgs e) 
    { 
     string filePath = string.Empty; 
     string fileExt = string.Empty; 
     OpenFileDialog file = new OpenFileDialog(); //open dialog to choose file 
     if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK) //if there is a file choosen by the user 
     { 
      filePath = file.FileName; //get the path of the file 
      fileExt = Path.GetExtension(filePath); //get the file extension 
      if (fileExt.CompareTo(".xls") == 0 || fileExt.CompareTo(".xlsx") == 0) 
      { 
       try 
       { 
        DataTable dtExcel = new DataTable(); 
        dtExcel = ReadExcel(filePath, fileExt); //read excel file 
        dataGridView1.Visible = true; 
        dataGridView1.DataSource = dtExcel; 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.Message.ToString()); 
       } 
      } 
      else 
      { 
       MessageBox.Show("Please choose .xls or .xlsx file only.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error); //custom messageBox to show error 
      } 
     } 
    } 

    public DataTable ReadExcel(string fileName, string fileExt) 
    { 
     string conn = string.Empty; 
     DataTable dtexcel = new DataTable(); 
     if (fileExt.CompareTo(".xls") == 0) 
      conn = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;HRD=Yes;IMEX=1';"; //for below excel 2007 
     else 
      conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0;HDR=NO';"; //for above excel 2007 
     using (OleDbConnection con = new OleDbConnection(conn)) 
     { 
      try 
      { 
       OleDbDataAdapter oleAdpt = new OleDbDataAdapter("select * from [Sheet1$]", con); //here we read data from sheet1 
       oleAdpt.Fill(dtexcel); //fill excel data into dataTable 
      } 
      catch { } 
     } 
     return dtexcel; 
    } 
+0

ReadRxcel의 코드는 무엇입니까? – Kason

+0

@Kason 죄송합니다. 통지하지 않았습니다. 나는 코드를 포함시켰다. 감사합니다. – MRu

+0

dtexcel.Columns()를 통해 열거하고 Name 속성을 가져옵니다. foreach (dtexcel.Columns의 DataColumn col) – jdweng

답변

1
foreach (DataRow row in dtexcel.Rows) { 
    for (int i = 0; i < dtexcel.Columns.Count;i++) 
     MessageBox.Show(row[i].ToString()); // row[i] is what you want. 
    } 

이 코드는 테이블의 모든 레코드를 확인 할 수 있습니다.

+0

감사합니다. 나는 비슷한 일을하고 헤더의 가치를 얻는다. 다시 한 번 감사드립니다! – MRu

0

헤더 행 당신은 반복하는을 통해 얻을 수 있습니다 : 필드가 널 (null)이지만 열이 항목은 다음 이름 난 열 수있다 "F {난}"이 될 것입니다있다

string[] columnName = new string[dtexcel.Columns.Count); 
for (int i = 0; i < dtexcel.Columns.Count; i++) 
    columnName[i] = dtexcel.Columns[i].ColumnName; 

합니다.

+0

table [i] dtexcel.Columns [i] .ColumnName; ? – Kason

+0

등호가 빠졌습니다 :) – Dartek12

관련 문제