2012-11-12 33 views
1

我想从我的Excel表导出数据到数据表,但不知道应该如何将数据放到DataTable中。有人可以帮我吗?从excel到数据表

我的代码是:

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

为什么不使用OleDbConnection到Excel? –

+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,其无限期地快于互操作。这是一个读取/写入excel文件的软件包。此外,它拥有非常好的许可证,并且不需要任何成本。

为了您的数据表,你可以沿着这条线去(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表示他不能使用OleDB,因为它无法读取多于255个字符的单元格 –

0

阅读从工作表中的数据转换成2D对象数组像这样:

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

现在你ca N A小区添加到所述的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); 
    } 

说明该双阵列索引从1和不为0等的阵列通常是在C#。

+0

顺便说一句 - 您还必须在开始时将列添加到DataTable权限。 – Dan

+0

你能告诉我你的代码吗,因为我正在试图去获取很多错误 –

+0

什么错误?添加像这样的列:http://msdn.microsoft.com/en-us/library/hfx3s9wd(v=vs.80).aspx – Dan