если возможно, я бы хотел раздеть все и получить идентификатор заказа. проблема: расположение идентификатора заказа и иногда он начинается с A или 1 .

  • Пример ячейки A1: {"Ref":"bad order","OrderId":"ABSER27"}
  • Пример ячейки A2: {"OrderId":"ABSER27"}
  • Пример ячейки A3: {"order_id":"12345678","customer_email":"BADORDER@gmail.com"}

  • Желаемый результат: B1 = ABSER27
  • Желаемый результат: B3 = ABSER27
  • Желаемый результат: B3 = 12345678

4 ответа4

1

Жизнь может быть проще с функцией Excel "Текст в столбец".

Шаг 1 - Нарезать строки на столбцы

Сначала удалите ведущий { и трейлинг } . Вы можете сделать это с помощью функции замены, или, если вы хотите сделать это с помощью функции, =MID(A1,2,LEN(A1)-2) .

Это приведет к исходным данным, таким как:

Затем выберите столбец A (без { }) и на ленте выберите «Данные»> «Инструменты данных»> «Текст в столбцы». Используйте следующие параметры:

Тогда информация будет аккуратно представлена в 4 колонках:

Шаг 2 - Выберите идентификатор заказа из столбцов

После этого вы можете делать все, что хотите, чтобы получить идентификатор заказа. Простым было бы поместить формулу, скажем, в столбец G с ячейкой G1, имеющей следующую формулу:

=INDIRECT("RC"&MATCH("order*id",A1:F1,0)+1,FALSE)

Поскольку "OrderId" также может быть в форме "order_id" из примера, мы используем подстановочный знак * для сопоставления. Затем формула извлечет ячейку справа от "OrderId".

0

Для этого типа проблем я использую надстройку Regex Find/Replace
(Я никак не связан с ним, просто пользователь-энтузиаст)

При этом вы можете использовать регулярные выражения, например:
=RegExReplace(UPPER(A1),".*ORDER_?ID"":""([^""]+)"".*","$1")

0

В ячейке B2 используйте функцию Mid

Текст = А2

Начальный номер = Используйте функцию поиска (поиск не чувствителен к регистру, тогда как Find is), чтобы найти позицию "id" в ячейке A2, начиная с позиции 1, а затем добавить количество символов к номеру заказа.

Количество символов - это разница начального номера от следующей позиции двойных кавычек (ASCII-символ 34).

=MID(A2,SEARCH("id",A2,1)+5,(FIND(CHAR(34),A2,(SEARCH("id",A2,1)+5))-(SEARCH("id",A2,1)+5)))

РЕДАКТИРОВАТЬ, чтобы добавить дополнительные «ID / ID» в поле электронной почты или идентификатор заказа без необходимости надстройки или VBA

Оберните истинные и ложные MID-операторы внутри IF, который проверяет наличие более одного идентификатора и что адрес электронной почты не является первым разделенным запятыми полями.

 =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))
)
)
-1

Исходя из представленной вами информации - идентификатор заказа начинается с первого A или 1 в поле, до первого следующего " (цитата) - это не сложно.  Проще всего использовать несколько «вспомогательных столбцов»:

  • 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 и D1 находят первые A и 1 соответственно в ячейке A1 .  Если их нет, FIND возвращает ошибку, и, используя IFERROR , мы устанавливаем значение длины A1 плюс один; т.е. смещение следующего символа после последнего символа.  E1 является меньшим из них; поэтому, если найден хотя бы один A или 1 , E1 указывает на первый.  Если их нет, то это также длина +1.

И теперь F1 находит первое " после вышесказанного».  Если нет " , это ошибка.  Если не было ни A ни 1 , E1 - это длина A1+1, поэтому F1 также является ошибкой.

Итак, наконец мы установили

  • B1=IF(ISERROR($F1), "ERROR", MID($A1, $E1, $F1-$E1))

Если F1 - ошибка, просто отобразите индикатор ERROR .  В противном случае извлеките подстроку из MIDdle A1 , начиная с местоположения A или 1 , и с длиной, которая занимает до (но не включая) разделителя " .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .