Como ler os dados do arquivo excel usando c# [duplicate]

[[2] esta pergunta já tem uma resposta aqui:

a minha aplicação precisa de ler dados de um ficheiro excel. Eu estou usando. Net e C# para o desenvolvimento. Não posso instalar o MS office no sistema. Por causa disso a minha aplicação não consegue ler o arquivo excel e lança um erro ao carregar o dll para o excel.

Como posso aceder ao ficheiro excel na minha aplicação num sistema onde o ms office não está instalado?

Author: shekhar, 2013-04-03

5 answers

Existe a opção de usar OleDB e usar as folhas do Excel como datatables em uma base de dados...

Só um exemplo.....
string con =
  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp\test.xls;" + 
  @"Extended Properties='Excel 8.0;HDR=Yes;'";    
using(OleDbConnection connection = new OleDbConnection(con))
{
    connection.Open();
    OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); 
    using(OleDbDataReader dr = command.ExecuteReader())
    {
         while(dr.Read())
         {
             var row1Col0 = dr[0];
             Console.WriteLine(row1Col0);
         }
    }
}

Este exemplo usa o fornecedor Microsoft.Jet.OleDb.4.0 para abrir e ler o ficheiro Excel. No entanto, se o arquivo é do tipo xlsx (do Excel 2007 e mais tarde), então você precisa baixar os componentes Microsoft Access Database Engine e instalá-lo na máquina de destino.

O fornecedor chama-se Microsoft.ACE.OLEDB.12.0;. Preste atenção ao fato de que há duas versões deste componente, uma para 32bit e uma para 64bit. Escolha o apropriado para a bitness de sua aplicação e que versão do Office está instalado (se houver). Há um monte de peculiaridades para ter esse driver trabalhando corretamente para a sua aplicação. veja esta questão por exemplo .

Claro que não precisas de um escritório instalado na máquina-alvo. Embora esta abordagem tenha alguns méritos, penso que deve prestar especial atenção à ligação assinalada por um comente em sua pergunta lendo arquivos excel de C#. Existem alguns problemas com relação à interpretação correta dos tipos de dados e quando o comprimento dos dados, presente em uma única célula do excel, é maior que 255 caracteres
 77
Author: Steve, 2017-05-23 12:26:01

CSharpJExcel para a leitura dos ficheiros do Excel 97-2003 (xls): http://sourceforge.net/projects/jexcelapi/

E ExcelPackage para a leitura dos ficheiros do Excel 2007/2010 (Office Open XML format, xlsx): http://excelpackage.codeplex.com/

E ExcelDataReader, que parece ter a capacidade de lidar com ambos os formatos: https://github.com/ExcelDataReader/ExcelDataReader

Boa sorte!
 17
Author: Obama, 2014-08-11 18:37:30
Não tenho uma máquina disponível para testar isto, mas deve funcionar. Em primeiro lugar, terá provavelmente de instalar o 2007 Office System Driver: Data Connectivity Components ou o Microsoft Access Database Engine 2010 Redistributable. Em seguida, tente o seguinte código, note que você terá que mudar o nome da folha na instrução selecione abaixo para corresponder ao nome de código no seu arquivo excel:
using System.Data;
using System.Data.OleDb;

namespace Data_Migration_Process_Creator
{
    class Class1
    {
        private DataTable GetDataTable(string sql, string connectionString)
        {
            DataTable dt = null;

            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand(sql, conn))
                {
                    using (OleDbDataReader rdr = cmd.ExecuteReader())
                    {
                        dt.Load(rdr);
                        return dt;
                    }
                }
            }
        }

        private void GetExcel()
        {
            string fullPathToExcel = "<Path to Excel file>"; //ie C:\Temp\YourExcel.xls
            string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=yes'", fullPathToExcel);
            DataTable dt = GetDataTable("SELECT * from [SheetName$]", connString);

            foreach (DataRow dr in dt.Rows)
            {
                //Do what you need to do with your data here
            }
        }
    }
}
Nota: Não tenho ambiente para testar isto. Escritório instalado) então eu não posso dizer se ele vai funcionar em seu ambiente ou não, mas eu não vejo por que ele não deve funcionar.
 7
Author: Mark Kram, 2017-06-12 14:46:22

Salve o ficheiro Excel para CSV, e leia o ficheiro resultante com C# usando uma biblioteca de leitura CSV como FileHelpers.

 5
Author: Robert Harvey, 2013-04-03 16:55:00

Converter o ficheiro excel para .csv ficheiro (valor separado por vírgulas ficheiro) e agora pode facilmente lê-lo.

 4
Author: petko_stankoski, 2018-01-11 06:57:56