Importar arquivo excel .net
Prezados,
Me deparei com o seguinte problema "a empresa onde trabalho possui um sistema externo que está com problemas para exportar uma grande quantidade de colunas de um relatório num total de 20 colunas, assim, é preciso efetuar a exportação duas vezes, um exemplo seria exportar 12 colunas em um arquivo e 8 colunas em outro arquivo". Devido a esta situação foi designado para a equipe desenvolver uma aplicação C# e Asp .NET que importasse os dois arquivos e automaticamente estes fossem juntados, ou seja, eu faria um FileUpload destes dois arquivos e mandava importar, nesse mesmo botão "importar" terá que ser feito com que o arquivo de 8 colunas se junte ao de 12 colunas de modo sequencial e gere um único arquivo com as 20 colunas. Alguém poderia me ajudar de como fazer essa junção de colunas?
OBS: Entramos em contato com a empresa que desenvolveu o sistema, mas este está morto. Ninguém mais o desenvolve.
Desde já agradeço.
Me deparei com o seguinte problema "a empresa onde trabalho possui um sistema externo que está com problemas para exportar uma grande quantidade de colunas de um relatório num total de 20 colunas, assim, é preciso efetuar a exportação duas vezes, um exemplo seria exportar 12 colunas em um arquivo e 8 colunas em outro arquivo". Devido a esta situação foi designado para a equipe desenvolver uma aplicação C# e Asp .NET que importasse os dois arquivos e automaticamente estes fossem juntados, ou seja, eu faria um FileUpload destes dois arquivos e mandava importar, nesse mesmo botão "importar" terá que ser feito com que o arquivo de 8 colunas se junte ao de 12 colunas de modo sequencial e gere um único arquivo com as 20 colunas. Alguém poderia me ajudar de como fazer essa junção de colunas?
OBS: Entramos em contato com a empresa que desenvolveu o sistema, mas este está morto. Ninguém mais o desenvolve.
Desde já agradeço.
Renato Pereira
Curtidas 0
Respostas
Fabiano Carvalho
23/07/2014
Voces não possuem acesso ao banco de dados? Acredito que seja mais facil realizar a importação diretamente do banco, mas também acredito que seja possível realizar a tarefa que voce sugeriu.
GOSTEI 0
Renato Pereira
23/07/2014
Infelizmente não temos acesso ao banco de dados, a empresa não liberou o acesso. O problema está nisso, pois não tenho relacionamento entre entre as colunas, é uma consulta dinâmica. A questão é em como dar continuidade ao primeiro arquivo a partir da 13ª coluna seguindo o exemplo na primeira mensagem sem o vinculo dos campos? no meu ponto de vista é impossível.
GOSTEI 0
Joel Rodrigues
23/07/2014
Você pode abrir os dois arquivos, fazer um loop sobre as linhas de um deles (já que ambos possuem a mesma quantidade de linhas) e acessar as colunas de ambos na mesma iteração. Algo do tipo:
valorColuna1 = arquivo1[0]; valorColuna2 = arquivo1[1]; ... valorColuna13 = arquivo2[0]; valorColuna14 = arquivo2[1]; ...
GOSTEI 0
Renato Pereira
23/07/2014
Joel, os arquivos excel não possuem o mesmo números de linhas, pois alguns campos tem relacionamento e gera mais de uma informação. Um exemplo seria uma OS para "manutenção" e "instalação", no segundo arquivo será exibido duas linhas referente a esta OS gerando assim um maior número de linhas do que primeiro arquivo. Devido as circunstâncias na aplicação que será desenvolvida será criado um banco de dados para a junção dos arquivos. Agora a dúvida é como fazer a importação destes dois arquivos de uma vez, alguém poderia me ajudar?
GOSTEI 0
Renato Pereira
23/07/2014
Joel, os arquivos excel não possuem o mesmo números de linhas, pois alguns campos tem relacionamento e gera mais de uma informação. Um exemplo seria uma OS para "manutenção" e "instalação", no segundo arquivo será exibido duas linhas referente a esta OS gerando assim um maior número de linhas do que primeiro arquivo. Devido as circunstâncias na aplicação que será desenvolvida será criado um banco de dados para a junção dos arquivos. Agora a dúvida é como fazer a importação destes dois arquivos de uma vez, alguém poderia me ajudar?
GOSTEI 0
Joel Rodrigues
23/07/2014
Então não entendi bem. Deu a impressão de que são dois arquivos que se complementam. Um com algumas colunas, e outro com o restante das colunas da mesma tabela. Então não é isso? São arquivos separados, com dados distintos?
GOSTEI 0
Joel Rodrigues
23/07/2014
Se forem arquivos separados, qual é sua dificuldade? Basta ler um arquivo, depois o outro e enviar os dados para o seu banco, um arquivo de cada vez.
GOSTEI 0
Renato Pereira
23/07/2014
Os arquivos são contínuos, um complementa o outro. Mas, é uma consulta dinâmica onde podem solicitar vários campos de tabelas diferentes. No primeiro arquivo eu possuo 10 colunas e no outro outras 10. Porém, o número de registro alteram nestes arquivos.
Exemplo: No primeiro arquivo excel eu possuo algumas informações sobre as ordens de serviço (OS). No segundo, tem colunas que são referentes a cada serviço que é composta por "manutenção, instalação, reparação, entre outras" das OS. Com isso, no segundo arquivo eu possuo uma média 3 registros por OS de um determinado contrato, ou seja, no segundo arquivo posso ter registros repetidos nas colunas "contrato" e "OS" e diferentes na coluna "serviço".
No contrato "xxx" da os "yyy" possuo serviço "zzz".
No contrato "xxx" da os "yyy" possuo serviço "www".
Entendeu o processo Joel?
Creio que a solução mais prática para da junção dos arquivos seja salvar os dados no banco separadamente em suas respectivas tabelas, depois fazer uma consulta e salvar todos os dados em uma tabela a parte.
Hoje preciso de uma solução para fazer a importação do arquivo excel, vi alguns exemplos utilizando o OLEDB e não obtive sucesso, saberia me ajudar quanto a isso?
Exemplo: No primeiro arquivo excel eu possuo algumas informações sobre as ordens de serviço (OS). No segundo, tem colunas que são referentes a cada serviço que é composta por "manutenção, instalação, reparação, entre outras" das OS. Com isso, no segundo arquivo eu possuo uma média 3 registros por OS de um determinado contrato, ou seja, no segundo arquivo posso ter registros repetidos nas colunas "contrato" e "OS" e diferentes na coluna "serviço".
No contrato "xxx" da os "yyy" possuo serviço "zzz".
No contrato "xxx" da os "yyy" possuo serviço "www".
Entendeu o processo Joel?
Creio que a solução mais prática para da junção dos arquivos seja salvar os dados no banco separadamente em suas respectivas tabelas, depois fazer uma consulta e salvar todos os dados em uma tabela a parte.
Hoje preciso de uma solução para fazer a importação do arquivo excel, vi alguns exemplos utilizando o OLEDB e não obtive sucesso, saberia me ajudar quanto a isso?
GOSTEI 0
Joel Rodrigues
23/07/2014
Agora entendi.
Os arquivos contém dados distintos, e pelo que vi há uma relação de mestre-detalhes entre eles.
Não vejo problema nenhum em ler um arquivo de cada vez, a começar pelo "mestre" ou "tabela pai", que é o das OS. Em seguida lê o outro com os serviços (detalhes ou tabela filha).
E com relação ao banco, com certeza a melhor estrutura a ser usada é a de duas tabelas), que se relacionam pelo campo chave da OS.
Os arquivos contém dados distintos, e pelo que vi há uma relação de mestre-detalhes entre eles.
Não vejo problema nenhum em ler um arquivo de cada vez, a começar pelo "mestre" ou "tabela pai", que é o das OS. Em seguida lê o outro com os serviços (detalhes ou tabela filha).
E com relação ao banco, com certeza a melhor estrutura a ser usada é a de duas tabelas), que se relacionam pelo campo chave da OS.
GOSTEI 0
Joel Rodrigues
23/07/2014
Com relação a como importar, com OLE DB deveria dar certo. Você obteve algum erro?
GOSTEI 0
Renato Pereira
23/07/2014
Joel, tive o erro de "não foi possível localizar ISAM instalável". Tanto desktop como Web. Saberia me informar como resolver?
GOSTEI 0
Joel Rodrigues
23/07/2014
Na sua string de conexão, o parâmetro DataSource está escrito junto (DataSource) ou separado (Data Source)? Se estiver junto, separe e teste.
Parece besteira, mas já vi em algum fórum algo sobre isso.
Parece besteira, mas já vi em algum fórum algo sobre isso.
GOSTEI 0
Renato Pereira
23/07/2014
Joel, consegui solucionar o problema. Todas as minhas ferramentas são 64 bits, por lógica a biblioteca Microsoft Access Database também deveria ser. Porém, tive que instalar a versão 32 para o OleDb funcionasse. Estranho mais ta rodando, kkkk! Obrigado pelas dicas.
GOSTEI 0
Renato Pereira
23/07/2014
Joel, consegui fazer a importação de um arquivo através do código abaixo:
Com isso, gostaria de saber se você saberia me informar como ler um segundo arquivo?
Criei uma tabela para cada arquivo e insiro o mesmo comando no segundo botão com os dados da tabela referente ao arquivo.
*Não me recordo o nome do erro, depois posto aqui. Mas, sei que acontece na linha "importar.WriteToServer(ds.Tables[0]);"
string conexao = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='D:\Ramon\planilha.xlsx';Extended Properties='Excel 12.0; HDR=Yes\"; OleDbConnection origem = default(OleDbConnection); origem = new OleDbConnection(conexao); OleDbCommand selecao = default(OleDbCommand); selecao = new OleDbCommand("SELECT * FROM [Plan$]", origem); OleDbDataAdapter adaptador = new OleDbDataAdapter(); adaptador.SelectCommand = selecao; DataSet ds = new DataSet(); adaptador.Fill(ds); gdvDados.DataSource = ds.Tables[0]; origem.Close(); SqlConnection destino = new SqlConnection(); destino.ConnectionString = @"Server=.\SQLEXPRESS; Database=Importacao; Trusted_Connection = True"; destino.Open(); SqlBulkCopy importar = default(SqlBulkCopy); importar = new SqlBulkCopy(destino); importar.DestinationTableName = "Teste"; importar.WriteToServer(ds.Tables[0]); destino.Close();
Com isso, gostaria de saber se você saberia me informar como ler um segundo arquivo?
Criei uma tabela para cada arquivo e insiro o mesmo comando no segundo botão com os dados da tabela referente ao arquivo.
*Não me recordo o nome do erro, depois posto aqui. Mas, sei que acontece na linha "importar.WriteToServer(ds.Tables[0]);"
GOSTEI 0
Renato Pereira
23/07/2014
Resolvido, obrigado pela ajuda de todos.
GOSTEI 0
Joel Rodrigues
23/07/2014
Opa, desculpe a demora. Andei meio ausente do fórum.
Fico feliz que tenha conseguido.
Abraço.
Fico feliz que tenha conseguido.
Abraço.
GOSTEI 0