Veja neste artigo como podemos importar uma planilha do Microsoft Excel para o ASP.Net.

Veja baixo o código:


public class ImportExcel
{
     public DataTable Importar(string arquivo)
    {
        string ext = string.Empty;
        string aspas = "\"";
        string Conexao = string.Empty;

        for (int i = arquivo.Length - 1; i < arquivo.Length; i--)
        {
            if (arquivo[i] != '.')
            {
                ext += arquivo[i];
            }
            else
            {
                ext += ".";
                break;
            }
        }

        ext = StringUtils.Inverter(ext);

        if (ext == ".xls")
        {
            Conexao = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" 
            + arquivo + ";" + "Extended Properties=" + aspas 
            + "Excel 8.0;HDR=YES" + aspas;
        }
        if (ext == ".xlsx")
        {
            Conexao = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" 
            + arquivo + ";" + "Extended Properties=" + aspas 
            + "Excel 12.0;HDR=YES" + aspas;
        }

        System.Data.OleDb.OleDbConnection Cn = new System.Data.OleDb.OleDbConnection();
        Cn.ConnectionString = Conexao;
        Cn.Open();
        object[] Restricoes = { null, null, null, "TABLE" };
        DataTable DTSchema = 
        Cn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, Restricoes);
        if (DTSchema.Rows.Count > 0)
        {
            string Sheet = DTSchema.Rows[0]["TABLE_NAME"].ToString();
            System.Data.OleDb.OleDbCommand Comando = 
            new System.Data.OleDb.OleDbCommand("SELECT * FROM [" + Sheet + "]", Cn);
            DataTable Dados = new DataTable();
            System.Data.OleDb.OleDbDataAdapter DA = 
            new System.Data.OleDb.OleDbDataAdapter(Comando);
            DA.Fill(Dados);
            Cn.Close();
            return Dados;
        }
        return null;
    }
}

Para importação do arquivo xlsx é preciso estar instalado o AccessDatabaseEngine.exe download no site da microsoft.

Enquanto a importação está sendo feita o usuário não pode estar com a planilha aberta, assim é importante criar uma cópia desta em uma pasta temporária e passar esse path por parâmetro. (e excluir a temp depois )


Uses:
using System;
using System.Data;
using System.Data.Odbc;
using System.Data.OleDb;
using System.IO;
using System.Reflection;
using System.Text;
using System.Web;

Manipulação do resultado DataTable

 for (int i = 0; i < Dados.Columns.Count; i++)
{
colunas.Add(Dados.Columns[i].ToString());
}

foreach (DataRow DR in Dados.Rows)
{
linha.Add(DR.ItemArray[0].ToString());
linha.Add(DR.ItemArray[1].ToString());
linha.Add(DR.ItemArray[2].ToString());
}

Com isso finalizo este artigo abordando a importação de dados do Excel para o ASP.Net.