Gravar de xml para ...
 
Notifications
Clear all

Gravar de xml para txt campos com condições

1 Posts
1 Usuários
0 Likes
916 Visualizações
(@pedro12345)
Posts: 48
Eminent Member
Topic starter
 

Boa tarde a todos,

Estou a ter alguma dificuldades em continuar com o código e necessito da vossa ajuda.

Basicamente tenho um ficheiro em .xml em que se encontra a abrir como tabela e procuro buscar apenas 3 colunas que começam por estes campos:

NAME17 POINTS_COUNT Pt
EOP 342 X=2181.18  Y=673.492  Z=-864.605

Neste momento estou a passar estas colunas para uma nova folha: "Folha2" para a partir daí compilar o código, sendo a "Folha3" o formatado pretendido para gravar como ficheiro de texto com tabulações .txt.

Vou anexar o ficheiro original e o final, do que é realmente pretendido obter...

mas no campos "NAME17", existem nomes que se repetem em n linhas e o objetivo é montar as coordenadas x,y e z separadas por tabulação, começando e terminado neste formato (de preferência colocando as coordenadas com 4 casas decimais, de forma a ficarem bem tabeladas).

Neste ficheiro especifico existem estes nomes distintos em apenas algumas linhas ordenadas pelo nome, na coluna "NAME17" (mas podem ser outros nomes para outros ficheiros daí necessitar de uma macro geral)

EOP
RAIADOR
P000
P001
P002
M541A2081210
POTTING 1
POTTING 2
POTTING 3
POTTING 4
M541A1081203
M541A2081208
P003
P004
P005

O objetivo é colocar sempre a iniciar cada listagem de campos do "NAME17" com

"START " e nome do campo

"P" e número de coordenadas existente para o campo

após a ultima coordenada(linha do campo) coloca 

"END" ( ou seja, entre o P 343 e o "END" teremos 343 linhas com as tais coordenadas x,y e z)

 

e de seguida, após colocar o END P 343, coloca novo ciclo, com o nome do  2campo da "NAME17" e torna a colocar "START" e nome do campo seguinte.. e repete...

"P" e número de coordenadas que existem para o campo "RAIADOR" e posteriormente todas as coordenadas...

e novamente "END RADIADOR" e novo ciclo com o "P000", etc..

START EOP    
P 343      
2181.1800    673.4920    -864.6050
END EOP      
START RAIADOR    
P 354      
2212.6300    660.3580    -886.8900

 

Abaixo o código já desenvolvido, no qual estou tendo dificuldade em continuar para criar os ciclos de leitura, inserindo linhas com os Starts/END e os P e nº e coordenadas... a "FOLHA3" deveria ser gravada como .txt separada por tabulações para o caso das coordenadas e deveriam contar todas 4 casas decimais...

Sub MACRO_TXT_TAB()
'
' MACRO_VERA Macro
' Macro Vera - LASERs LAY-UP
'
Application.DisplayAlerts = False
'
    ActiveWindow.SmallScroll ToRight:=48

Range("Tabela1[[#Headers],[NAME17]]").EntireColumn.Select
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
    Sheets("Folha1").Select
    Application.CutCopyMode = False


    Range("Tabela1[[#Headers],[POINTS_COUNT]]").EntireColumn.Select
    Selection.Copy
    Sheets("Folha2").Select
    Range("B1").Select
    ActiveSheet.Paste
    Sheets("Folha1").Select
    Application.CutCopyMode = False
    
    Range("Tabela1[[#Headers],[Pt]]").EntireColumn.Select
    Selection.Copy
    Sheets("Folha2").Select
    Range("C1").Select
    ActiveSheet.Paste
    Range("A1:C1").Select
    Application.CutCopyMode = False
    
Columns("A:A").Select 'Caso seja necessário troque a letra da coluna
 Selection.SpecialCells(xlCellTypeBlanks).Select
 Selection.EntireRow.Delete
 Range("a1").Select
 
 
 
 Columns("A:A").Select
    Selection.Copy
    Range("F1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.Range("$F$1:$F$50000").RemoveDuplicates Columns:=1, Header:= _
        xlYes
    Sheets.Add After:=ActiveSheet
    ActiveCell.FormulaR1C1 = "=""START ""&Folha2!R2C6"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "=""P""&Folha2!RC[1]+""1"""
    Range("A3").Select
 
 Sheets("Folha2").Select
 Sheets("Folha2").Activate
 
 
 Dim i, NLinhas2, Nlinhas3 As Integer
 Dim nome As String
 
 
 i = 0
 NLinhas2 = Range("A65536").End(xlUp).Row
 Nlinhas3 = 3
 
 For i = 1 To NLinhas2
 
nome = Range("A2").Value 'coloca primeiro nome
If (nome) = Range("A" & i + 1) Then
Worksheets("Folha3").Cells(Nlinhas3, 1) = Worksheets("Folha2").Cells(i + 1, 3)
 Else: Exit For

End If

 Nlinhas3 = Nlinhas3 + 1
 
Next i


    Application.DisplayAlerts = True
End Sub
 
Postado : 18/04/2021 1:42 pm
Tags do Tópico