Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Neto Diniz

Trabalhando com arquivo Excel

Recommended Posts

Bom dia,

 

Gostaria de uma ajuda no seguinte:

 

Montei um código em C# para ler arquivo excel, até ai tranquilo, está lendo o arquivo jogando em uma dataset e trabalhando como se fosse um banco:

 

up.pasta = "Upload";
                up.nomeinicial = "arquivo";
                up.fu = FileUpload1;
                result = up.Save();
                string nome_arquivo = up.nomearquivo;

                lblmsg.Text = up.msg;

                if (result)
                {
                    //OracleConnection Conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OraConn2"].ConnectionString);

                    OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
                                                                  "Data Source=C:\\Projetos_Citylar\\Conferencia\\Upload\\" + nome_arquivo + ";" +
                                                                  "Extended Properties=Excel 8.0;");

                    OleDbCommand Cmd = new OleDbCommand("SELECT CPF, NOME_TITULAR FROM [Plan1$]", conexao);

                    Cmd.Connection.Open();
                    OleDbDataAdapter da = new OleDbDataAdapter(Cmd);
                    DataSet ds = new DataSet();

                    da.Fill(ds);

                    OleDbDataReader dr = Cmd.ExecuteReader();
                    dr.Read();

Neste arquivo Excel eu tenho Nome e CPF, tenho em meu banco de dados MySQL uma tabela chamada servidores onde contem nome e cpf também, neste arquivo excel eu tenho 1000 nomes e todos com cpf, este arquivo chama-se 4(quarta) regiao, em minha tabela de servidores eu tenho 10000 servidores da 1(primeira) a 10(décima) regiao, logo estou fazendo o seguinte:

 

pego o cpf do arquivo excel e comparo com o cpf da minha tabela de servidores, quando é igual eu mostro ele atraves de um response.write até ai tranquilo estou fazendo numa boa, mas nesta tabela de servidores eu tenho 1200 servidores e na tabela de excel eu tenho 1000 eu consigo verificar todos os cpf que tem no excel, a duvida que nao consigo resolver é a seguinte, quando ele achar todos os 1000 do arquivo excel vai sobrar 200 na tabela de servidores, gostaria de pegar esses 200 e guardar em algum lugar para que eu possa mostrar ele na tela. Como posso fazer isso, vou mostrar o codigo abaixo, está comparando tudo só nao consigo pegar os 200 que ele nao achou e sobrou na tabela de servidores pois no arquivo excel eu tenho 1000 e na tabela eu tenho 1200. O código completo está abaixo. Muito obrigado desde já!

 

Neto Diniz.

 

 

 

protected void Btn_Upload_Click(object sender, EventArgs e)
        {
            bool result = false;
            uploadArquivo up = new uploadArquivo();
            {
                up.pasta = "Upload";
                up.nomeinicial = "arquivo";
                up.fu = FileUpload1;
                result = up.Save();
                string nome_arquivo = up.nomearquivo;

                lblmsg.Text = up.msg;

                if (result)
                {

                    OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
                                                                  "Data Source=C:\\Projetos_Citylar\\Conferencia\\Upload\\" + nome_arquivo + ";" +
                                                                  "Extended Properties=Excel 8.0;");

                    OleDbCommand Cmd = new OleDbCommand("SELECT CPF, NOME_TITULAR FROM [Plan1$]", conexao);

                    Cmd.Connection.Open();
                    OleDbDataAdapter da = new OleDbDataAdapter(Cmd);
                    DataSet ds = new DataSet();

                    da.Fill(ds);

                    OleDbDataReader dr = Cmd.ExecuteReader();
                    dr.Read();

                    Cmd.Connection.Close();
                    conexao.Close();


                    foreach (DataRow dw in ds.Tables[0].Rows) 
                    {
                        //EXCEL
                        nome_servidor = dw["NOME_TITULAR"].ToString();
                        recebe_cpf_excel = dw["CPF"].ToString();

                        string MyConString = "DSN=Server MySQL;DRIVER={MySQL ODBC 3.51 Driver};" +
                                                 "SERVER=localhost;" +
                                                 "DATABASE=conferencia;" +
                                                 "UID=root;" +
                                                 "PASSWORD=;" +
                                                 "OPTION=3";

                        OdbcConnection MyConnection = new OdbcConnection(MyConString);
                        MyConnection.Open();
                        MyConnection.Close();
                        

                        OdbcCommand Cmd2 = new OdbcCommand("SELECT NOME_TITULAR, CPF, TRIBUNAL, FORMA_CONTRIBUICAO FROM SERVIDORES WHERE TRIBUNAL = 'TRT 04ª REGIÃO' AND CPF = '" + recebe_cpf_excel + "'", MyConnection);
                        Cmd2.Connection.Open();

                        OdbcDataAdapter da2 = new OdbcDataAdapter(Cmd2);
                        DataSet ds2 = new DataSet();

                        da2.Fill(ds2);


                        foreach (DataRow dw2 in ds2.Tables[0].Rows) 
                        {
                            //BANCO DE DADOS
                            strCpf = dw2["CPF"].ToString();

                            if (strCpf == recebe_cpf_excel)
                            {

                                nome_servidor_bancodados = dw2["NOME_TITULAR"].ToString();
                                tribunal = dw2["TRIBUNAL"].ToString();

                                Response.Write("<table width=100% cellspacing=0 cellpadding=0 border=1>" +
                                                  "<tr>" +
                                                      "<td width=200>" + nome_servidor_bancodados + "</td>" +
                                                      "<td width=100>" + strCpf + "</td>" +
                                                      "<td width=100>" + tribunal + "</td>" +
                                                  "</tr>" +
                                              "</table>");
                                break;
                            }
                        }
                    }
                }
            }

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que você esta fazendo um select na sua planilha e comparando a planilha com o banco e não o contrário.

Você poderia primeiramente armazenar todos os do banco em um DataTable, depois você sai comparando sua planilha com a datatable. Cria um campo que identifica qual foi lido e qual não foi. Depois faz o que quiser com os não lidos.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que você esta fazendo um select na sua planilha e comparando a planilha com o banco e não o contrário.

Você poderia primeiramente armazenar todos os do banco em um DataTable, depois você sai comparando sua planilha com a datatable. Cria um campo que identifica qual foi lido e qual não foi. Depois faz o que quiser com os não lidos.

 

Abraços...

 

Bom dia Quintelab você é meu conterraneo sou de cuiabá/mt.... valeu pela ajuda... estou iniciando agora e gostaria de pedir a você se poderia me dar esse exemplo que você falou pois nao consegui faze-lo funcionar... poderia me ajudar em cima deste código que eu postei...

 

Grande Abraço...

Neto Diniz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia inicial seria inverter os select, como seu banco de dados possui mais registro que sua planilha, poderia executar o select do banco de dados primeiramente e a cada registro do banco você procura se existe no Excel.

 

Mas não sei se existe a opção de fazer filtros com where no excel, acho que sim.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.