se possível, gostaria de retirar tudo e obter o ID do pedido. o problema é: Localização do ID do pedido e às vezes começa com A
ou 1
.
- Exemplo de célula A1:
{"Ref":"bad order","OrderId":"ABSER27"}
- Exemplo de célula A2:
{"OrderId":"ABSER27"}
- Exemplo de célula A3:
{"order_id":"12345678","customer_email":"[email protected]"}
- Resultado desejado: B1 =
ABSER27
- Resultado desejado: B3 =
ABSER27
- Resultado desejado: B3 =
12345678
Responder1
A vida pode ser mais fácil com a função “Texto para coluna” do Excel.
Passo 1 – Divida as cordas em colunas
Primeiro, retire o início {
e o final }
. Você pode fazer isso com a função replace ou, se quiser, com uma função, =MID(A1,2,LEN(A1)-2)
.
Isso resultará em dados de origem como:
Em seguida, selecione a coluna A (sem { }
) e na faixa de opções, selecione Dados > Ferramentas de dados > Texto para colunas. Use as seguintes opções:
Então você terá as informações apresentadas ordenadamente em 4 colunas:
Etapa 2 - Escolha o ID do pedido nas colunas
Depois disso, você pode fazer o que quiser para pegar o ID do pedido. Uma solução simples seria colocar uma fórmula, digamos, na coluna G com a célula G1 tendo a fórmula abaixo:
=INDIRECT("RC"&MATCH("order*id",A1:F1,0)+1,FALSE)
Como "OrderId" também pode estar no formato "order_id" do exemplo, usamos um curinga *
para fazer a correspondência. A fórmula irá então buscar a célula à direita de “OrderId”.
Responder2
Para este tipo de problemas eu usoSuplemento Localizar/Substituir Regex
(Não sou afiliado de forma alguma a ele, apenas um usuário entusiasta)
Com isso você pode usar expressões regulares, por exemplo:
=RegExReplace(UPPER(A1),".*ORDER_?ID"":""([^""]+)"".*","$1")
Responder3
Na célula B2 use a função Mid
Texto =A2
Número inicial = Use a função Pesquisar (a pesquisa não diferencia maiúsculas de minúsculas, enquanto Localizar é) para localizar a posição de "id" na célula A2 começando na posição 1 e, em seguida, adicione o número de caracteres ao Número do pedido.
O número de caracteres é a diferença do número inicial para a próxima posição de aspas duplas (caractere ASCII 34).
=MID(A2,SEARCH("id",A2,1)+5,(FIND(CHAR(34),A2,(SEARCH("id",A2,1)+5))-(SEARCH("id",A2,1)+5)))
EDIT para permitir "ID/id" adicional no campo Email ou ID do pedido sem necessidade de complemento ou VBA
Coloque instruções MID verdadeiras e falsas dentro de um IF que verifica se há mais de um ID e se o endereço de e-mail não é o primeiro campo separado por vírgula.
=IF(
AND((LEN(A2)-LEN(SUBSTITUTE(UPPER(A2),("ID"),"")))/LEN("ID")>1,ISERROR(FIND("@",LEFT(A2,FIND(",",A2)-1),1))=FALSE),
MID(A2,
FIND("~",SUBSTITUTE(UPPER(A2),"ID","~",2),1)+5,
FIND(CHAR(34),A2,FIND("~",SUBSTITUTE(UPPER(A2),"ID","~",2),1)+5)-(FIND("~",SUBSTITUTE(UPPER(A2),"ID","~",2),1)+5)
),
MID(A2,
SEARCH("ID",A2,1)+5,
(FIND(CHAR(34),A2,(SEARCH("ID",A2,1)+5))-(SEARCH("ID",A2,1)+5))
)
)
Responder4
Com base nas informações que você apresentou - o ID do pedido vai do primeiro A
ou 1
no campo até o primeiro seguinte "
(cotação) - isso não é difícil. É mais fácil se usarmos algumas “colunas auxiliares”:
C1
→=IFERROR(FIND("A",$A1), LEN($A1)+1)
D1
→=IFERROR(FIND("1",$A1), LEN($A1)+1)
E1
→=MIN($C1,$D1)
F1
→=FIND("""", $A1, $E1)
C1
e D1
encontre o primeiro A
e 1
, respectivamente, na célula A1
. Se não houver, FIND
retorna um erro e, usando IFERROR
, definimos o valor como comprimento A1
mais um; ou seja, o deslocamento do próximo caractere após o último caractere.
E1
é o menor deles; então, se pelo menos um A
ou 1
foi encontrado, E1
aponta para o primeiro. Se não houver, também será comprimento +1.
E agora F1
encontra o primeiro "
após o acima. Se não houver um "
, isso é um erro. Se não houve um A
ou a 1
, E1
o comprimento é A1
+1 e F1
também é um erro.
Então finalmente definimos
B1
→=IF(ISERROR($F1), "ERROR", MID($A1, $E1, $F1-$E1))
Se F1
for um erro, basta exibir um ERROR
indicador. Caso contrário, extraia a substring do MIDdle de A1
, começando no local de A
or 1
e com um comprimento que vá até (mas não incluindo) o delimitador "
.