Hi Debug,
Check this example. now take its reference.
I have used below article to read excel to DataTable.
HTML
<asp:FileUpload ID="FileUpload1" runat="server" /><br />
<asp:Button Text="Upload" runat="server" ID="btnUpload" OnClick="OnUpload" /><br /><br />
<asp:GridView runat="server" ID="gvCustomers">
</asp:GridView>
Namespaces
C#
using System;
using System.Data;
using ClosedXML.Excel;
VB.Net
Imports System
Imports System.Data
Imports ClosedXML.Excel
Code
C#
protected void OnUpload(object sender, EventArgs e)
{
using (XLWorkbook workBook = new XLWorkbook(FileUpload1.PostedFile.InputStream))
{
IXLWorksheet workSheet = workBook.Worksheet(1);
DataTable dt = new DataTable();
bool firstRow = true;
foreach (IXLRow row in workSheet.Rows())
{
if (firstRow)
{
foreach (IXLCell cell in row.Cells())
{
dt.Columns.Add(cell.Value.ToString());
}
firstRow = false;
}
else
{
dt.Rows.Add();
int i = 0;
foreach (IXLCell cell in row.Cells())
{
dt.Rows[dt.Rows.Count - 1][i] = cell.Value.ToString();
i++;
}
}
}
DataTable dtFinal = new DataTable();
dtFinal.Columns.AddRange(new DataColumn[3] {
new DataColumn("CustomerId", typeof(string)),
new DataColumn("Country", typeof(string)),
new DataColumn("Name",typeof(string)) });
for (int i = 0; i < dt.Rows.Count; i++)
{
dtFinal.Rows.Add();
}
for (int i = 0; i < dtFinal.Columns.Count; i++)
{
string dtFinalColumnName = dtFinal.Columns[i].ColumnName;
for (int j = 0; j < dt.Columns.Count; j++)
{
string dtColumnName = dt.Columns[j].ColumnName;
if (dtColumnName.ToLower() == dtFinalColumnName.ToLower())
{
for (int k = 0; k < dt.Rows.Count; k++)
{
DataRow dr = dt.Rows[k];
dtFinal.Rows[k][dtFinalColumnName] = dr[dtFinalColumnName];
dtFinal.AcceptChanges();
}
break;
}
}
}
this.gvCustomers.DataSource = dtFinal;
this.gvCustomers.DataBind();
}
}
VB.Net
Protected Sub OnUpload(ByVal sender As Object, ByVal e As EventArgs)
Using workBook As XLWorkbook = New XLWorkbook(FileUpload1.PostedFile.InputStream)
Dim workSheet As IXLWorksheet = workBook.Worksheet(1)
Dim dt As DataTable = New DataTable()
Dim firstRow As Boolean = True
For Each row As IXLRow In workSheet.Rows()
If firstRow Then
For Each cell As IXLCell In row.Cells()
dt.Columns.Add(cell.Value.ToString())
Next
firstRow = False
Else
dt.Rows.Add()
Dim i As Integer = 0
For Each cell As IXLCell In row.Cells()
dt.Rows(dt.Rows.Count - 1)(i) = cell.Value.ToString()
i += 1
Next
End If
Next
Dim dtFinal As DataTable = New DataTable()
dtFinal.Columns.AddRange(New DataColumn(2) {New DataColumn("CustomerId", GetType(Integer)), New DataColumn("Country", GetType(String)), New DataColumn("Name", GetType(String))})
For i As Integer = 0 To dt.Rows.Count - 1
dtFinal.Rows.Add()
Next
For i As Integer = 0 To dtFinal.Columns.Count - 1
Dim dtFinalColumnName As String = dtFinal.Columns(i).ColumnName
For j As Integer = 0 To dt.Columns.Count - 1
Dim dtColumnName As String = dt.Columns(j).ColumnName
If dtColumnName.ToLower() = dtFinalColumnName.ToLower() Then
For k As Integer = 0 To dt.Rows.Count - 1
Dim dr As DataRow = dt.Rows(k)
dtFinal.Rows(k)(dtFinalColumnName) = dr(dtFinalColumnName)
dtFinal.AcceptChanges()
Next
Exit For
End If
Next
Next
Me.gvCustomers.DataSource = dtFinal
Me.gvCustomers.DataBind()
End Using
End Sub