none
Erro Importação Excel para DataGridView - Só funciona com o arquivo aberto RRS feed

  • Pergunta

  • Bom dia, pessoal.

    Eu estou fazendo uma importação de dados de uma planilha em excel para um DataGridView. Estava funcionando normalmente, mas começou a dar problema do nada, até que eu percebi que se eu abrisse a planilha e fizesse a importação, funcionaria de boa, aí eu fecho o arquivo e para de funcionar novamente.

    Segue meu código e a linha em que o erro acontece.

    public void ExcelToDataGridView(string caminho, DataGridView dgv, int planilha)
    {
        string strConexao = String.Empty;
    
        if (IntPtr.Size == 4)
            strConexao = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=0\"", caminho);
        else if (IntPtr.Size == 8)
            strConexao = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=0\"", caminho);
        else
            System.Windows.Forms.MessageBox.Show("Computador não suportado para a aplicação");
    
        OleDbConnection conn = new OleDbConnection(strConexao);
    
        //----- O ERRO ACONTECE AQUI ----- 
        //----- An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll
    
    Additional information: A conexão para visualização da planilha Microsoft Excel vinculada foi perdida.
        conn.Open();
    
        DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
    
        DataSet output = new DataSet();
        foreach (DataRow row in dt.Rows)
        {
            // obtem o noma da planilha corrente
            string sheet = row["TABLE_NAME"].ToString();
            // obtem todos as linhas da planilha corrente
            OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheet + "]", conn);
            cmd.CommandType = CommandType.Text;
            // copia os dados da planilha para o datatable
            DataTable outputTable = new DataTable(sheet);
            output.Tables.Add(outputTable);
            new OleDbDataAdapter(cmd).Fill(outputTable);
        }
    
        dgv.DataSource = output.Tables[planilha];
        dgv.AutoGenerateColumns = true;
    }
    
    Obrigado :)

    Leonardo D'Amato

    terça-feira, 20 de outubro de 2015 11:35

Respostas

  • Bom dia Leonardo N. D'Amato,

    Esse comportamento é esperado, existe um artigo da Microsoft que diz exatamente isso.

    ACC: #Error na planilha vinculada após fechar o arquivo no Excel

    1. Causa: A planilha foi fechada no Microsoft Excel e Microsoft Access perdeu seu vínculo estabelecido na planilha.
    2. Resolução: Para restabelecer o vínculo com a planilha do Microsoft Excel, feche e reabra a tabela vinculada no Microsoft Access.

    Ou seja, esse comportamento é padrão, há até informações no artigo de como reproduzir o problema.

    Atenciosamente, Roberto Alves

    quinta-feira, 22 de outubro de 2015 11:09

Todas as Respostas

  • Boa tarde Leonardo N. D'Amato,

    Poderia informar por gentileza o erro que está ocorrendo com detalhes?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 20 de outubro de 2015 14:57
  • Additional information: A conexão para visualização da planilha Microsoft Excel vinculada foi perdida.

    Leonardo D'Amato

    terça-feira, 20 de outubro de 2015 16:37
  • Bom dia Leonardo N. D'Amato,

    Esse comportamento é esperado, existe um artigo da Microsoft que diz exatamente isso.

    ACC: #Error na planilha vinculada após fechar o arquivo no Excel

    1. Causa: A planilha foi fechada no Microsoft Excel e Microsoft Access perdeu seu vínculo estabelecido na planilha.
    2. Resolução: Para restabelecer o vínculo com a planilha do Microsoft Excel, feche e reabra a tabela vinculada no Microsoft Access.

    Ou seja, esse comportamento é padrão, há até informações no artigo de como reproduzir o problema.

    Atenciosamente, Roberto Alves

    quinta-feira, 22 de outubro de 2015 11:09
  • Bom, o jeito então é fazer uma rotina para ele primeiro abrir a planilha e depois a ler. Que merda rs.

    Obrigado, Roberto.


    Leonardo D'Amato

    quinta-feira, 22 de outubro de 2015 11:17