在Excel中使用EPPlus从Excel到DataTable

时间:2019-02-27 06:12:32

标签: c# datatable epplus

当前,我正在尝试使用EPPlus将数据从excel读取到C#中的DataTable中。

我当前面临的主要问题是,当我填充DataTable的标题时,excel中的空列没有被拾取,因此,当我尝试将数据加载到DataTable中时,这些列会被拧紧向上(数据读入错误的列)。

是否可以用Excel工作表的列名映射DataTable中的列名,以便它们正确填充?

Excel数据

| Column 1  |  Column 2   |      | Column 3 |
|   Value   |    Value    |      |   123    |
|  Value 2  |   Value 2   |      |   234    |

在我的代码中,我通过Excel在DataTable中创建所有标题

DataTable dt = new DataTable();
ExcelWorksheet ws = xlPackage.Workbook.Worksheets[worksheetName];

foreach (var firstRowCell in ws.Cells[rowStart, 1, rowStart, ws.Dimension.End.Column])
{
    int num = 1;
    string header = firstRowCell.Text;

    Common.writeLog("header - " + firstRowCell);

    if (header.Contains("\n"))
    {
       header = header.Replace("\n", " ");
    }

    while (dt.Columns.Contains(header))
    {
       header = firstRowCell.Text + num;
       num++;

       if (header.Contains("\n"))
       {
           header = header.Replace("\n", " ");
       }
    }

    //Common.writeLog("header - " + header);
    dt.Columns.Add(header);

}

DataTable标头

Column 1 , Column 2 , Column 3

接下来,我将Excel数据读入我的数据表

 int startRow = rowStart + 1;
 for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
 {
     var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
     var row = dt.NewRow();
     foreach (var cell in wsRow)
     {
         try
         {
             row[cell.Start.Column - 1] = cell.Value;
         }
         catch (Exception) { }
     }
     dt.Rows.Add(row);
 }

数据表中的当前数据

| Column 1  |  Column 2   | Column 3 |
|   Value   |    Value    |          |
|  Value 2  |   Value 2   |          |

0 个答案:

没有答案