Notifications
Clear all

Webscraping vba - ms planner

10 Posts
2 Usuários
0 Reactions
2,064 Visualizações
(@decovioti)
Posts: 17
Active Member
Topic starter
 

Ola Pessoal

Eu gostaria de pedir uma ajuda, se possivel

No meu servico utilizamos o MS-Planner e estou tentando fazer um "WebScraping" no VBA, onde eu gostaria de extrair/colar as status e as atividades em uma planilha de excel, onde os status serao colocados em cada coluna por exemplo, "On Hold", "Started", "In Progress" e nas linhas o nome de cada atividade, pertencente a aquele status em particular.

Entao, por exemplo, dentro de "On Hold", eu tenho a tarefa1, tarefa2. dentro de "Started", eu tenho, Tarefa4, Tarefa5 e Tarefa6.

Utilizando a linha de codigo abaixo, eu consegui colar os cabecalhos sem problema.

Initialize the document

Set ht = objIE.document

Set plan_task = ht.getElementsByClassName("titleSection")

Set title_task = ht.getElementsByClassName("titleRow")


'Insert the header of each column

c = 1

For Each task In plan_task

    Sheet1.Cells(1, c).Value = (task.innerText)

    c = c + 1

Next

Porem, nao estou conseguindo criar a uma logica para que as atividades sejam coladas em suas respectivas colunas, se baseando pelo status da atividade.

Eu estou tentando usar o codigo abaixo para fazer isso.

'we will output data to excel

l = 2

For Each task1 In title_task


        Sheets("Sheet1").Range("A" & l).Value = (task1.innerText)

'        Sheets("Sheet1").Range("B" & l).Value = (task1.innerText)

'        Sheets("Sheet1").Range("C" & l).Value = (task1.innerText)

'        Sheets("Sheet1").Range("D" & l).Value = (task1.innerText)

'        Sheets("Sheet1").Range("E" & l).Value = (task1.innerText)

'        Sheets("Sheet1").Range("F" & l).Value = (task1.innerText)

'        Sheets("Sheet1").Range("G" & l).Value = (task1.innerText)

'        Sheets("Sheet1").Range("H" & l).Value = (task1.innerText)

        l = l + 1

 'repeat until last has been evaluated

  Next

Coloquei abaixo, num print o “AS IS” e o “SHOULD BE”

 

Se alguém puder me ajudar, ficarei muito grato e desculpe não pude passar o código inteiro.


Editado pela Moderação. Motivo: Procure utilizar o botão Código (< >) sempre que for inserir código VBA ou Fórmulas.

Este tópico foi modificado 4 anos atrás by DECOVIOTI
 
Postado : 22/09/2020 10:47 pm
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 

Sem poder testar o código imagino que algo como isto deva resolver:

lin = 2
col = 1
For Each task1 In title_task

If task1.innerText = "#Instructions" And lin <> 2 Then
lin = 2
col = col + 1
Sheets("Sheet1").Cells(lin, col).Value = task1.innerText
lin = lin + 1
Else
Sheets("Sheet1").Cells(lin, col).Value = task1.innerText
lin = lin + 1
End If

Next
 
Postado : 22/09/2020 11:02 pm
(@decovioti)
Posts: 17
Active Member
Topic starter
 

@raygsson Obrigado por responder

Consegui adaptar o novo código e rodar a macro, entretanto ao chegar no primeiro IF, a execução não
Está entrando na condição = "#Instructions" And lin <> 2 e vai direto para o Else, colando todos os
resultados na primeira coluna, como anteriormente.


If task1.innerText = "#Instructions" And lin <> 2 Then 'primeiro IF
lin = 2
col = col + 1
Sheets("Sheet1").Cells(lin, col).Value = task1.innerText
lin = lin + 1
Else
Sheets("Sheet1").Cells(lin, col).Value = task1.innerText
lin = lin + 1
End If
Next

Obrigado
Este post foi modificado 4 anos atrás por DECOVIOTI
 
Postado : 23/09/2020 4:38 am
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 

Tente fazer com que reconheça a palavra

"#Instructions" pra acessar o If.
Verifique exatamente como a palavra vem e ajuste no código.
 
Postado : 23/09/2020 9:37 am
(@decovioti)
Posts: 17
Active Member
Topic starter
 

@raygsson obrigado pela resposta

Estou me dedicando em aprender o VBA, existe alguma maneira via código para que a palavra #Instructions# seja reconhecida?

Colocar numa variável de repente>?

 

Obrigado

 

 
Postado : 23/09/2020 3:05 pm
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 

@decovioti  anexa a planilha com esses dados capturados , quero confirmar como vem essa informação. Não precisa do seu código, apenas dos dados 

 
Postado : 23/09/2020 3:18 pm
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 

tente fazer o teste do IF de uma forma diferente:

If Not Instr(task1.innerText,"Task")> 0 And lin <> 2 Then 
 
Postado : 23/09/2020 3:45 pm
(@decovioti)
Posts: 17
Active Member
Topic starter
 

@raygsson Ola 

Eu anexei uma amostra em uma planilha com o nome real de cada atividade.

Eu no print que foi anexado inicialmente, eu havia substituído o nome das atividades por task, só para efeitos de exemplo

Espero que o print ajude

 

Obrigado

 
Postado : 23/09/2020 3:58 pm
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 

@decovioti Tem um espaço no "# Instructions" , inclua esse espaco no  IF.

 
Postado : 23/09/2020 4:10 pm
(@decovioti)
Posts: 17
Active Member
Topic starter
 

@raygsson 

depois the algumas tentativas, consegui

resolver usando a linha de código 

If InStr(1, task1.innerText, "# Instructions") And lin <> 2 Then

obrigado pela ajuda
 
Postado : 24/09/2020 7:44 am