none
Apagar Dados da planilha antes de fazer a importação RRS feed

  • Pergunta

  • Ola,

    Estou criando um pacote que faz importaçao de uma base do SQL para o Excel, porém gostaria de toda vez que rodar o pacote ele apague os dados que estao na  planilha e insira os novos...

    como faço isso???


    viniciuseroico

    quinta-feira, 14 de março de 2013 12:40

Respostas

  • Daniel, eu entendo sua colocação mas neste caso nao acredito que vá ter tantos problemas assim, pois a finalidade dessa planilha é documentar informações das bases porém cada base vai fornecer em torno de 3 a 4 linhas para cada aba do excel.

    Mas a boa noticia é que eu consegui fazer o que queria, peguei alguns exemplos do mesmo procedimento porém feitos em DTS ainda, e fazendo algumas alteraçoes funcionaram, agora consigo alimentar cada aba da planilha com informaçoes de servidores distintos, e toda vez que vou exportar os dados para essas abas ele deleta os registros antigos apenas da aba relacionada, abaixo segue como ficou:

    - São 3 connections Managers onde:

    - 1 OLEDB para conexao com a tabela que tem as informaçoes que serão exportadas

    - 1 OLEDB para fazer o delete da aba da planilha (não consegui fazer funcionar usando o Excel Connection manager para essa operaçao)

    - 1 Excel Connection Manager para conexao com a planilha

    Em seguida criei no ControlFlow com:

     - Execute SQL Task: que faz o delete da aba da planilha

    - Execute SQL Task (utilizando Excel Connection): para criar a aba da planilha

    - Data Flow Task: onde conecto com o banco , e em seguida exporto para a planilha

    O que vi que surtiu efeito para que funcionasse o delete usando conexao OLEDB mesmo sendo 64bits foi alem de marcar no projeto para executar em modo 32bits, na opçao "ALL" do connection manager OLEDB para a planilha existe um parametro chamado "Extend Propertis" nesse parametro preenchi com "Excel 8.0".

    Acredito que fiz com que o excel trabalhasse com uma versao de gerenciamento de comunicaçao diferente, porem nao entendi muito bem essa parte, caso alguem tenha entendido e puder explicar....


    viniciuseroico

    sexta-feira, 15 de março de 2013 17:58

Todas as Respostas

  • Vinicius Eróico, bom dia!

    Bem, em relação a exclusão dos registros no excel o provider Jet não prove essa possibilidade. Porém temos alguns workarounds para esse problema, veja se esses links te ajudam.

    http://www.grapefruitmoon.net/deleting-from-excel-in-ssis-a-workaround/

    http://www.rafael-salas.com/2008/03/ssis-and-dynamic-excel-destinations_01.html

    Se for útil classifique!


    /* Se útil por favor classifique a resposta */

    quinta-feira, 14 de março de 2013 12:49
  • Bom dia!

    Uma alternativa é você trabalhar com templates.

    - Crie o template e o mantenha numa pasta de templates
    - Quando iniciar o processo, copie o template para uma outra área
    - Insira os dados nessa cópia do arquivo, não alterando o arquivo original

    Abçs
    quinta-feira, 14 de março de 2013 12:54
  • Obrigado Luan,

    Vou pesquisa-los...


    viniciuseroico

    quinta-feira, 14 de março de 2013 12:55
  • Vinicius,

    Voce realmente precisa apagar os dados do Excel?

    Porque voce poderia deletar a planilha utilizando a ferramenta File System Task, e depois gerar o Excel normalmente.

    Só um detalhe, quando geramos dados do SQL ou de outra fonte para uma planilha Excel, chamamos esse processo de exportação ;)

    []´s!


    Daniel Reino - Analista Business Intelligence / DBA

    quinta-feira, 14 de março de 2013 20:42
  • Daniel,

    Na verdade a ideia de apagar os dados, é porque serão verificaçoes de dados que podem ou nao ser alterados, por isso a ideia de nao acumular dados repetidos, e nao gostaria de deletar a planilha pois a ideia era que essa planilha receba informaçoes de varios servidores e cada servidor alimentaria um aba do excel, apagando a planilha no export do primeiro servidor quando o segundo servidor fizesse tambem o export pela logica ele apagaria a planilha deletando os dados que o primeiro servidor inseriu....

    estou tentando fazer assim, pois vi isso funcionando em um servidor, porem era em SQL 2000 e utilizando DTS, como se ele utilizasse um Execute SQL Task, referenciava a planilha e executava o comando "drop table 'Nome da Aba'

    Porem no SSIS tentei fazer dessa maneira mas ele nao entende, apesar de na hora de Debugar ele informar que deletou, na planilha ele apenas insere a informaçao duplicando os dados.


    viniciuseroico


    sexta-feira, 15 de março de 2013 14:38
  • Vinícuis, 

    Faça o seguinte, crie uma planilha modelo e coloque em outro local, e então quando você for colocar as novas informações, mova a antiga e coloque a nova com os dados novos.


    /* Se útil por favor classifique a resposta */

    sexta-feira, 15 de março de 2013 15:36
  • Boa tarde Vinicius,

    Porque voce nao trabalha os dados dentro do banco de dados, e no final com os dados ja prontos, voce apenas exporta para o Excel?

    Eu nao acho boa pratica trabalhar dados dessa forma numa planilha!

    At,


    Daniel Reino - Analista Business Intelligence / DBA

    sexta-feira, 15 de março de 2013 16:31
  • Daniel, eu entendo sua colocação mas neste caso nao acredito que vá ter tantos problemas assim, pois a finalidade dessa planilha é documentar informações das bases porém cada base vai fornecer em torno de 3 a 4 linhas para cada aba do excel.

    Mas a boa noticia é que eu consegui fazer o que queria, peguei alguns exemplos do mesmo procedimento porém feitos em DTS ainda, e fazendo algumas alteraçoes funcionaram, agora consigo alimentar cada aba da planilha com informaçoes de servidores distintos, e toda vez que vou exportar os dados para essas abas ele deleta os registros antigos apenas da aba relacionada, abaixo segue como ficou:

    - São 3 connections Managers onde:

    - 1 OLEDB para conexao com a tabela que tem as informaçoes que serão exportadas

    - 1 OLEDB para fazer o delete da aba da planilha (não consegui fazer funcionar usando o Excel Connection manager para essa operaçao)

    - 1 Excel Connection Manager para conexao com a planilha

    Em seguida criei no ControlFlow com:

     - Execute SQL Task: que faz o delete da aba da planilha

    - Execute SQL Task (utilizando Excel Connection): para criar a aba da planilha

    - Data Flow Task: onde conecto com o banco , e em seguida exporto para a planilha

    O que vi que surtiu efeito para que funcionasse o delete usando conexao OLEDB mesmo sendo 64bits foi alem de marcar no projeto para executar em modo 32bits, na opçao "ALL" do connection manager OLEDB para a planilha existe um parametro chamado "Extend Propertis" nesse parametro preenchi com "Excel 8.0".

    Acredito que fiz com que o excel trabalhasse com uma versao de gerenciamento de comunicaçao diferente, porem nao entendi muito bem essa parte, caso alguem tenha entendido e puder explicar....


    viniciuseroico

    sexta-feira, 15 de março de 2013 17:58