2012-11-12 4 views
1

Excel 테이블에서 데이터 테이블로 데이터를 내보내고 싶지만 DataTables에 데이터를 저장하는 방법을 모르겠습니다. 누군가 그것을 도와 줄 수 있습니까?excel에서 datatables로

내 코드는 다음과 같습니다

Excel.Application xlApp = new Excel.Application(); 
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(userSelectedFilePath2); 
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
Excel.Range xlRange = xlWorksheet.UsedRange; 

DataTable excelTb = new DataTable(); 

for (int i = 0; i <= xlRange.Rows.Count - 1; i++) 
{ 
    for (int j = 1; j <= xlRange.Columns.Count; j++) 
    { 
      excelTb.Columns.Add(xlRange.Cells[0,j].Value2.ToString()); 
      foreach (DataRow extb in excelTb.Rows) 
      { 
       DataRow newDataRow = excelTb.NewRow(); 
       // Here should be something to put data in DataTable 
      } 
    } 
} 
+0

Excel에 OleDbConnection을 사용하지 않는 이유는 무엇입니까? –

+0

OleDb는 셀에서 255자를 읽을 수 없기 때문에 Microsoft.Office.Interop.Excel을 시도합니다. –

+0

정말 Microsoft.Office.Interop.Excel이 어렵고 "userfriendly"가 아닙니다. [EPPlus] (http://epplus.codeplex.com/) 사용을 제안합니다. –

답변

1

이 시도 :

for (int row = 0; row < xlRange.Rows.Count; row++) 
    { 
     DataRow dataRow = null; 
     if (row != 0) dataRow = excelTb.NewRow(); 

     for (int col = 0; col < xlRange.Columns.Count; col++) 
     { 
      if (row == 0) //Headers 
      { 
       excelTb.Columns.Add(xlRange.Cells[row + 1, col + 1].Value2.ToString()); 
      } 
      else //Data rows 
      { 
       dataRow[col] = xlRange.Cells[row + 1, col + 1].Value2.ToString(); 

      } 
     } 
    } 
+0

코드를 한 번 더 확인할 수 있습니까? 여기에 많은 오류가 있습니다. –

+0

이동 중에도 휴대 전화에서 입력하고 있습니다.). 내가 일할 때 나는 그것을 점검 할 것이다. – LMB

+0

@UniLe 코드를 변경했습니다. – LMB

0

만의 무기한 빠른 상호 운용성보다, XLSX 및 XLSM 파일을 처리해야 epplus를 사용하는 경우. 엑셀 파일을 읽고 쓰는 패키지입니다. 또한 라이센스가 매우 좋으며 비용도 들지 않습니다. 당신의 데이터 테이블에 대한

이 라인을 따라 갈 수있다 (vb.net 코드)

 Dim tbl As New DataTable 
    for cols = 0 to j 'you have to define the columns first 
     tbl.Columns.Add() 
    next 

    for cols = 0 to j 
     for rows = 0 to your_rowcount 
      Dim row = tbl.NewRow 
'Here is the critical part: iterate over the worksheet, and take each value from the sheet. put the value into the datatable. The datatable needs to get a new row for each worksheet.row 
    Dim value = yourworksheet.cells(cols+1,rows+1).value 
    row(cols)=Value 
    next 
next 
0
private void grabData(string filename) 
      { 
        // Clear DataTaable before generating new Table Data/ 
        ds.Clear(); 

        // Connection String to the previously selected file. 
        // HDR=Yes advises that spreadsheet has columns. 

        OleDbConnection con = new OleDbConnection(
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + 
        ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""); 


        // The criteria required to Build DataTable. Select specific columns     //from spreadsheet where teh Site Statuse is LIVE. 
        string strSQL = "SELECT * FROM [YOURTABLE]"; 

        // The Command that we will use with our DataAdapter. 
        OleDbCommand cmd = new OleDbCommand(strSQL, con); 

        OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
        da.Fill(ds, "YourTable"); 


      } 
+0

OP는 그가 세포에서 255 개 이상의 문자를 읽을 수 없으므로 OleDB를 사용할 수 없다고 말했습니다. –

0

는 2D 객체 배열로 워크 시트에서 데이터를 읽기 like :

//Convert from interop object to native C# object, indexed 1 to length 
object[,] data = (object[,])xlWorksheet.UsedRange.Value2; 

이제 ca n 다음과 같이 DataRow에 셀을 추가합니다.

for (int row = 1; row < data.GetUpperBound(0); row++) 
    { 
     DataRow newDataRow = excelTb.NewRow(); 
     newDataRow["AStringColumn"] = data[row,1].ToString(); 
     newDataRow["ADoubleColumn"] = Convert.ToDouble(data[row, 2]); 
     //repeat for each column OR replace with a column loop and use newDataRow[col] = data[row, col].ToString(); 

     excelTb.Rows.Add(newDataRow); 
    } 

double 배열은 일반적으로 C#에있는 배열처럼 0에서 인덱싱되지 않으며 1에서 인덱싱됩니다.

+0

BTW - 처음에는 DataTable에 열을 추가해야합니다. – Dan

+0

당신이 코드에 나를 보여줄 수 있습니까? 많은 노력을 기울이기 때문에 많은 오류가 있습니다. –

+0

무슨 오류가 있습니까? 다음과 같은 열을 추가하십시오. http://msdn.microsoft.com/en-us/library/hfx3s9wd(v=vs.80).aspx – Dan