1

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
          }
     }
}
4

4 に答える 4

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();

            }
        }
    }
于 2012-11-12T09:46:57.393 に答える
0

xlsxファイルとxlsmファイルのみを処理する必要がある場合は、epplusを使用します。これは、相互運用よりも無期限に高速です。エクセルファイルの読み取り/書き込み用のパッケージです。さらに、それは非常に素晴らしいライセンスを持っており、費用はかかりません。

データテーブルについては、この線に沿って進むことができます(vb.net codE)

     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
于 2012-11-12T09:45:28.037 に答える
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");


            }
于 2012-11-12T09:51:06.583 に答える
0

次のように、ワークシートから 2D オブジェクト配列にデータを読み取ります。

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

これで、次のように 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 からインデックス付けされることに注意してください。

于 2012-11-12T09:55:37.150 に答える