Ir ao conteúdo
  • Cadastre-se

Macro para copiar dados da pasta para planilha


Posts recomendados

Boa noite, 

 

Tenho uma pasta onde salvo os meus relatórios...

No final do mês é gerado cerca de 30 relatórios e preciso extrair as informações dele... 

É possível criar uma macro para copiar os valores para outra planilha(geral)  sem ter que abrir uma a uma?

 

Por exemplo:

 

file:///C:/Users/diego/Desktop/20 04 2016.ods'#Planilha1.H11

file:///C:/Users/diego/Desktop/20 04 2016.ods'#Planilha1.H12

file:///C:/Users/diego/Desktop/20 04 2016.ods'#Planilha1.J11

file:///C:/Users/diego/Desktop/20 04 2016.ods'#Planilha1.J12

 

file:///C:/Users/diego/Desktop/21 04 2016.ods'#Planilha1.H11

file:///C:/Users/diego/Desktop/21 04 2016.ods'#Planilha1.H12

file:///C:/Users/diego/Desktop/21 04 2016.ods'#Planilha1.J11

file:///C:/Users/diego/Desktop/21 04 2016.ods'#Planilha1.J12

 

Obrigado!

 

 

 

 

Link para o comentário
Compartilhar em outros sites

@TianK Boa noite, 

 

Primeiramente muito obrigado por disponibilizar seu tempo para me ajudar.

 

Mandei duas planilhas... Fiz mais o menos do jeito que é na empresa. 

 

A planilha que eu mandei com a descrição exemplo é a que eu preencho todos os dias. (Só que no final do mês preciso obter das horas paradas de todas elas)

 

Eu salvo as planilhas  em ordem cronológica, 01 07 2016, 02 07 2016, 03 07 2016..

 

Exemplo:

"Elas ficam localizadas no diretório" C:/Users/diego/Desktop/Maquina/CLP/21 04 2016.ods

 

Obrigado! 

 

Exemplo.ods

BDDADOSMES.ods

Link para o comentário
Compartilhar em outros sites

@mdiego , boa noite!

 

Primeiramente desculpe a demora para responder, mas semana passada realmente o serviço apertou.

 

Pelo que entendi da estrutura dos seus relatórios e da planilha de "consolidação", cheguei a esta macro (anexo abaixo).

 

Por favor, veja se lhe atende e dê um retorno. :thumbsup:

 

 

Código que faz a importação dos relatórios:

Sub ImportarRelatorios

   ' Informe o número do mês e
   ' o caminho completo para os relatórios
   sMes = "06" ' <<< Nº do Mês
   sCaminho = "C:\Users\diego\Desktop\Maquina\CLP" '<<< Caminho completo

   ' Carregar a Planilha1
   oDoc = ThisComponent
   oPlan1 = oDoc.Sheets.getByName( "Planilha1" )

   ' Definir as propriedades para abrir o relatório
   Dim PropArq(0) As New com.sun.star.beans.PropertyValue
   PropArq(0).Name = "Hidden"
   PropArq(0).Value = True

   ' Iniciar a barra de status   
   BarraStatus = oDoc.CurrentController.StatusIndicator
   BarraStatus.reset
   
   ' Loop pelos relatórios do mês
   For J = 1 To 31
      sNomeRel = Right("0"&J,2) & " " & Right("0"&sMes,2) & " 2016.ods"      
      sUrlRelatorio =  convertToURL( sCaminho & "\" & sNomeRel )
            
      ' Verificar se o relatório existe
      If FileExists( sUrlRelatorio ) Then      
         ' Barra de Status: Indicar qual relatório será processado
         BarraStatus.start( "Importando...  [ " & sNomeRel & " ]",10)
         
         ' Abrir o relatório de forma oculta
         oArq = StarDesktop.loadComponentFromURL( sUrlRelatorio,"_blank",0,PropArq() )
         ' Barra de Status: Indicar o progresso
         BarraStatus.setValue(10)
         
         ' Obter os dados do relatório
         oArqPlan = oArq.Sheets.getByName( "Planilha1" )
         vData = oArqPlan.getCellRangeByName( "B1" ).Value
         mTurno1 = oArqPlan.getCellRangeByName( "A12:D22" ).getDataArray()
         mTurno2 = oArqPlan.getCellRangeByName( "A32:D42" ).getDataArray()
         ' Fechar o relatório
         oArq.Close( -1 )
         
         ' Preencher a planilha BDDADOSMES
         ULin = ULinha( oPlan1 )
         A = 0
         Do
           oPlan1.getCellByPosition( 0,ULin).Value = vData
           oPlan1.getCellByPosition( 1,ULin).Value = mTurno1(A)(0)
           oPlan1.getCellByPosition( 2,ULin).Value = mTurno1(A)(1)
           oPlan1.getCellByPosition( 3,ULin).Value = mTurno1(A)(2)
           oPlan1.getCellByPosition( 4,ULin).String = mTurno1(A)(3)
           ULin = ULin+1      
           A = A + 1    
         Loop Until mTurno1(A)(3) = ""            
         ULin = ULinha( oPlan1 )
         A = 0
         Do
           oPlan1.getCellByPosition( 0,ULin).Value = vData
           oPlan1.getCellByPosition( 1,ULin).Value = mTurno2(A)(0)
           oPlan1.getCellByPosition( 2,ULin).Value = mTurno2(A)(1)
           oPlan1.getCellByPosition( 3,ULin).Value = mTurno2(A)(2)
           oPlan1.getCellByPosition( 4,ULin).String = mTurno2(A)(3)
           ULin = ULin+1      
           A = A + 1    
         Loop Until mTurno2(A)(3) = ""         
      End If
      Next
   
   ' Restaurar a barra de status
   BarraStatus.End
   
   MsgBox "Concluído!"
End Sub
     
' Função para identificar a última linha preenchida
' da Planilha
Function ULinha(oPlanilha as Object) as Integer
   ' Carregar biblioteca de apoio "Tools"
   ' do LibreOffice
   GlobalScope.BasicLibraries.LoadLibrary("Tools")
   ULinha = GetLastUsedRow(oPlanilha) + 1
End Function

 

[]s.

TianK

BDDADOSMES (MACRO).ods.zip

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@TianK  Boa noite, Magina!

 

Cara, fiquei impressionado com o conhecimento que você tem, meus parabéns! Porque trabalhar com Excel VBA é uma coisa... Mas programar em Libreoffice, OpenOffice... ***** negócio difícil!

 

Funcionou perfeitamente.

 

Você aprendeu de forma  Empírica? Ou foi muito estudo?

 

Tem algum livro para recomendar?

 

Obrigado de verdade! 

 

Sds,

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Boa noite,@TianK! Em casa funcionou perfeitamente... Na empresa não funcionou muito bem porque não consegui adptar porque as células estão mescladas, você analisando essa planilha em anexo você irá identificar.

 

Não é querendo abusar, mas seria possível adaptar ou me mostrar como faz para adptar.

 

Obrigado e parabéns pelo conhecimento.

 

 

 

 

Folha Padrão Alterações 2.xls

Link para o comentário
Compartilhar em outros sites

@mdiego , bom dia!

 

Observei que as células mescladas deslocam os dados para colunas alternadas: uma com dado, outra sem. Por isso, as linhas abaixo precisam ser alteradas:

 

As linhas que obtém a matriz de dados através do método getDataArray:

   mTurno1 = oArqPlan.getCellRangeByName( "D19:J26" ).getDataArray()
   mTurno2 = oArqPlan.getCellRangeByName( "D38:J45" ).getDataArray()

 

As linhas que inserem os dados da matiz mTurno1 na planilha

   oPlan1.getCellByPosition( 0,ULin).Value = vData
   oPlan1.getCellByPosition( 1,ULin).Value = mTurno1(A)(0)
   oPlan1.getCellByPosition( 2,ULin).Value = mTurno1(A)(2)
   oPlan1.getCellByPosition( 3,ULin).Value = mTurno1(A)(4)
   oPlan1.getCellByPosition( 4,ULin).String = mTurno1(A)(6)

 

 As linhas que inserem os dados da matriz mTurno2 na planilha:

   oPlan1.getCellByPosition( 0,ULin).Value = vData
   oPlan1.getCellByPosition( 1,ULin).Value = mTurno2(A)(0)
   oPlan1.getCellByPosition( 2,ULin).Value = mTurno2(A)(2)
   oPlan1.getCellByPosition( 3,ULin).Value = mTurno2(A)(4)
   oPlan1.getCellByPosition( 4,ULin).String = mTurno2(A)(6)

...

 

Em 12/07/2016 às 22:04, mdiego disse:

Você aprendeu de forma  Empírica? Ou foi muito estudo?

 

Tem algum livro para recomendar?

 

 

Estudo e empirismo. A API UNO é bem confusa de entender sem ler sobre ela. Até indiquei neste poste um livro em português que ajuda muito neste ponto. Mas, o grosso de informação  eu extraio dos fóruns em inglês e do livro de Andrew Pitonyak (www.pitonyak.org).

 

[]s.

TianK

Link para o comentário
Compartilhar em outros sites

@TianK

 

Boa tarde,

 

A macro funcionou perfeitamente, agora é eu mesmo aperfeiçoar... Tenho 7 diretórios diferente e a cada planilha  há 2 guias.

O desafio é importar todos os dados de uma vez... 

 

Então, eu vi bastante coisa do Andrew Pitonyak, mas o que me castiga é o inglês. 

 

Obrigado! 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...