Alternativa padrão usando Microsoft Jet OLE DB 4.0

Exemplo de string de conexão com Excel usando Microsoft Jet OLE DB 4.0

Exemplo de string de conexão

Essa é uma string de conexão do provider Microsoft Jet OLE DB 4.0 para se conectar com Excel 2003, Excel 2002, Excel 2000 ou Excel 97.

Alternativa padrão

Tente esta se a acima não estiver funcionando. Alguns relatos de que o Excel 2003 precisa da seção extra OLEDB; no início da string.

OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Diretorio\Arquivo.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";

"HDR=Yes;" indica que a primeira linha contém nomes de coluna, não dados. "HDR=No;" indica o oposto.

"IMEX=1;" instrui o driver a sempre ler colunas de dados "intercalados" (números, datas, strings etc.) como texto. Observe que essa opção pode afetar negativamente o acesso de gravação à planilha do Excel.

Sintaxe SQL "SELECT [Nome da Coluna Um], [Nome da Coluna Dois] FROM [Planilha Um$]". Ou seja, o nome da planilha do Excel seguido por um "$" e envolto em colchetes "[" "]".

"SELECT * FROM [Planilha1$a5:d]", comece a selecionar os dados a partir da linha 5 e até a coluna D.

Consulte a chave do registro localizada em [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel], chamada REG_DWORD "TypeGuessRows". Essa é a chave para evitar que o Excel use apenas as primeiras 8 linhas para adivinhar o tipo de dados das colunas. Defina esse valor como 0 para examinar todas as linhas. Isso pode afetar o desempenho. Observe também que adicionar a opção IMEX=1 pode fazer com que o recurso IMEX seja ativado após apenas 8 linhas. Use IMEX=0 em vez disso para garantir que a chave TypeGuessRows do registro seja definida como 0 (examinar todas as linhas).

Se a pasta de trabalho do Excel estiver protegida por senha, você não poderá abri-la para acessar dados, mesmo fornecendo a senha correta na sua string de conexão. Se você tentar, receberá a seguinte mensagem de erro: "Não foi possível descriptografar o arquivo".

Uma solução alternativa para o problema "não foi possível descriptografar o arquivo"

Conexão através de diferentes linguagens

C#

Exemplo de código em C# de conexão com Excel usando Microsoft Jet OLE DB 4.0:

using System;
using System.Data.OleDb;

class DatabaseConnection {
    static void Main() {
        // Define a string de conexão Excel usando Microsoft Jet OLE DB 4.0
        string connectionString = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Diretorio\\Arquivo.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";

        using (OleDbConnection connection = new OleDbConnection(connectionString)) {
            try {
                // Abre a conexão
                connection.Open();

                Console.WriteLine("Conexão aberta com sucesso!");

                //
                // INSIRA SEU CÓDIGO AQUI
                //

            } catch (OleDbException ex) {
                // Erros específicos do OleDbException
                Console.WriteLine("Erro: " + ex.Message);
            } catch (Exception ex) {
                // Outros erros
                Console.WriteLine("Erro: " + ex.Message);            
            } finally {
                // Fecha a conexão
                if (connection != null) {
                    connection.Close();
                    Console.WriteLine("Conexão fechada.");
                }
            }
        }
    }
}

Se estiver usando .NET Core, você precisa antes instalar o pacote System.Data.OleDb com o seguinte comando:

dotnet add package System.Data.OleDb

VB.NET

Exemplo de código em VB.NET de conexão com Excel usando Microsoft Jet OLE DB 4.0:

Imports System
Imports System.Data.OleDb

Module DatabaseConnection

    Sub Main()
        Dim connectionString As String
        
        ' Define a string de conexão Excel usando Microsoft Jet OLE DB 4.0
        connectionString = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Diretorio\Arquivo.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";"

        Using connection As New OleDbConnection(connectionString)
            Try
                ' Abre a conexão
                connection.Open()

                Console.WriteLine("Conexão aberta com sucesso!")

                '
                ' INSIRA SEU CÓDIGO AQUI
                '

            Catch ex As OleDbException
                ' Erros específicos do OleDbException
                Console.WriteLine("Erro: " & ex.Message)
            Catch ex As Exception
                ' Outros erros
                Console.WriteLine("Erro: " & ex.Message)
            Finally
                ' Fecha a conexão
                If connection IsNot Nothing Then
                    connection.Close()
                    Console.WriteLine("Conexão fechada.")
                End If
            End Try
        End Using
    End Sub

End Module

ASP Clássico

Exemplo de código em ASP Clássico de conexão com Excel usando Microsoft Jet OLE DB 4.0:

<%
Dim conn, connectionString

' Cria a string de conexão para Excel usando Microsoft Jet OLE DB 4.0
connectionString = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Diretorio\Arquivo.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";"

Set conn = Server.CreateObject("ADODB.Connection")

' Abre a conexão
On Error Resume Next
conn.Open connectionString

' Verifica se a conexão foi aberta
If conn.State = 1 Then
    Response.Write "Conexão aberta com sucesso!"
    '
    ' INSIRA SEU CÓDIGO AQUI
    '
Else
    If Err.Number <> 0 Then
        Response.Write "Erro: " & Server.HTMLEncode(Err.Description)
    Else
        Response.Write "Erro: A conexão não pode ser estabelecida."
    End If

End If

On Error GoTo 0

' Fecha a conexão
conn.Close
Set conn = Nothing

%>

VBScript

Exemplo de código em VBScript de conexão com Excel usando Microsoft Jet OLE DB 4.0:

Dim conn, connectionString

' Define a string de conexão Excel usando Microsoft Jet OLE DB 4.0
connectionString = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Diretorio\Arquivo.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";"

Set conn = CreateObject("ADODB.Connection")

' Abre a conexão
On Error Resume Next
conn.Open connectionString

' Verifica se a conexão foi aberta
If conn.State = 1 Then
    Wscript.Echo "Conexão aberta com sucesso!"
    '
    ' INSIRA SEU CÓDIGO AQUI
    '
Else
    If Err.Number <> 0 Then
        WScript.Echo "Erro: " & Err.Description
    Else
        WScript.Echo "Erro: A conexão não pode ser estabelecida."
    End If

End If

On Error GoTo 0

' Fecha a conexão
conn.Close
Set conn = Nothing
Wscript.Echo "Conexão fechada."

JScript

Exemplo de código em JScript de conexão com Excel usando Microsoft Jet OLE DB 4.0:

var conn, connectionString;

// Define a string de conexão Excel usando Microsoft Jet OLE DB 4.0
connectionString = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Diretorio\\Arquivo.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";

conn = new ActiveXObject("ADODB.Connection");

// Abre a conexão
try {
    // Abre a conexão
    conn.Open(connectionString);
    if (conn.State === 1) {
        WScript.Echo("Conexão aberta com sucesso!");
        //
        // INSIRA SEU CÓDIGO AQUI
        //
    } else {
        WScript.Echo("Erro: A conexão não pode ser estabelecida.");
    }
} catch (e) {
    // Exibe a mensagem de erro
    WScript.Echo("Erro: " + e.description);
} finally {
    // Fecha a conexão
    conn.Close();
    conn = null;
}

C++

Exemplo de código em C++ de conexão com Excel usando Microsoft Jet OLE DB 4.0:

#include <iostream>
#include <cstdlib>
#include <string>
#include <atldbcli.h>

int main() {
    // Inicializa COM
    HRESULT hr = CoInitialize(NULL);
    if (FAILED(hr)) {
        std::cout << "Falha ao inicializar COM. Erro: " << hr << std::endl;
        return EXIT_FAILURE; // Encerra se a COM não puder ser inicializada
    }

    // Define a string de conexão Excel usando Microsoft Jet OLE DB 4.0
    std::wstring connectionString = L"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Diretorio\\Arquivo.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";


    CDataSource dataSource;
    CSession session;
    hr = dataSource.OpenFromInitializationString(connectionString.c_str());
    if (SUCCEEDED(hr)) {
        // Abre uma sessão
        hr = session.Open(dataSource);
        if (SUCCEEDED(hr)) {
            std::cout << "Conexão aberta com sucesso!" << std::endl;

            //
            // INSIRA SEU CÓDIGO AQUI
            //

            // Fecha a sessão e a conexão com o banco de dados
            session.Close();
            dataSource.Close();
        } else {
            std::cout << "Falha ao abrir sessão. Erro: " << hr << std::endl;
        }
    } else {
        std::cout << "Falha ao abrir conexão. Erro: " << hr << std::endl;
    }

    // Finaliza COM
    CoUninitialize();

    return EXIT_SUCCESS;
}