Tenho lutado com o seguinte; pode ser um pouco desafiador.
Tenho um arquivo Excel que foi exportado de um aplicativo XML.
Folha 1contém linhas de strings como as abaixo. Cada linha ímpar tem cerca de 10 dessas strings, mas isso pode variar. (Estou procurando uma solução para preencher as linhas pares; veja abaixo.)
Folha 2, Coluna A, contém um intervalo de strings como Measurement_1
, Ref_No
e Maximum_Velocity
, chamadoAtributos.
Preciso procurar cada um desses atributos em cada célula de cada linha ímpar doFolha 1e cole cadaexclusivoatributo que aparece como uma substring nessas strings em uma nova linha abaixo, cada uma em uma célula própria.
Observe que cada valor nas linhas geradas precisa ser exclusivo.
Existe alguma função, regex ou script VBA que pode fazer isso? Pesquisei extensivamente nos fóruns e em outros lugares e não consegui fazer isso sozinho.
Espero que tudo isso faça sentido, mas ficarei feliz em explicar qualquer coisa sem sentido!
Linha 1
Cell A1:
<ref attrid="Measurement_1" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=""><ref attrid="Measurement_1" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=" - "></ref></ref>
Cell B1:
"<ref attrid="Ref_No" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=""><ref attrid="Unit" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=" "><ref attrid="Vector" equalsign="=" includeattrname="false" resolveto="value" separator=" (Dia)"><ref attrid="Object_Diameter" equalsign="=" includeattrname="false" resolveto="unit" separator=""><ref attrid="Thread_Size" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=","><ref attrid="Object_Length" equalsign="=" includeattrname="false" resolveto="value" separator=" "><ref attrid="Object_Length" equalsign="=" includeattrname="false" resolveto="value" separator=" of ">"
Cell C1:
CONCATENATE("This ", LOWER(VAL("Device_Type")),F(AND(EXACT(VAL("Max_Temperature_Range"),("")),EXACT(VAL("Min_Temperature_Range"),"")),".",CONCATENATE("appeared to operate safely from a minimum temperature of ", VAL("Min_Temperature_Range"),UNIT("Min_Temperature_Range")," to a maximum temperature of ", VAL("Max_Temperature_Range"),UNIT("Max_Temperature_Range"),".")))
A saída desejada emLinha 2ficaria assim:
Cell A2:Measurement_1
Cell B2:Ref_No
Cell C2:Object_Diameter
Cell D2:Object_Length
Cell E2:Device_Type
Cell F2:Max_Temperature_Range
Cell G2:Min_Temperature_Range
Responder1
Suas strings XML parecem estranhas – muitas tags incompletas?
De qualquer forma, eu começaria a partir do arquivo XML e o carregaria usando o suplemento Power Query. Ele possui um manipulador "From XML" específico e você pode moldar facilmente os dados ao longo do caminho usando os comandos do Power Query.
Aqui está um exemplo que criei usando uma versão editada do seu conteúdo XML (adicionei um elemento raiz e tags de fechamento para torná-lo um arquivo XML válido).
A única ação que pareceu necessária para alcançar o que você deseja foi selecionar a coluna Attribute:attrid e escolher Remover Colunas/Remover Outras Colunas.
Você pode ver o resultado em segundo plano - uma tabela do Excel. Sempre que o arquivo XML for alterado, basta clicar em Atualizar para executar novamente o Power Query.