если возможно, я бы хотел убрать все и получить идентификатор заказа. Проблема в следующем: местоположение идентификатора заказа, и иногда он начинается с A
или 1
.
- Пример ячейки A1:
{"Ref":"bad order","OrderId":"ABSER27"}
- Пример ячейки A2:
{"OrderId":"ABSER27"}
- Пример ячейки A3:
{"order_id":"12345678","customer_email":"[email protected]"}
- Желаемый результат: B1 =
ABSER27
- Желаемый результат: B3 =
ABSER27
- Желаемый результат: B3 =
12345678
решение1
Жизнь может стать проще с функцией Excel «Текст по столбцу».
Шаг 1 — Разрежьте струны на столбики.
Сначала удалите начальные {
и конечные }
. Вы можете сделать это с помощью функции replace или, если хотите, с помощью функции =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".
решение2
Для решения такого рода задач я используюНадстройка Regex Find/Replace
(Я никак с этим не связан, просто энтузиаст-пользователь.)
При этом вы можете использовать регулярные выражения, например:
=RegExReplace(UPPER(A1),".*ORDER_?ID"":""([^""]+)"".*","$1")
решение3
В ячейке B2 используйте функцию Mid
Текст =A2
Начальный номер = используйте функцию поиска (поиск не чувствителен к регистру, в отличие от функции «Найти»), чтобы найти позицию «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))
)
)
решение4
На основе представленной вами информации — Order ID идет от первого 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 of A1
, начиная с местоположения A
or 1
, и с длиной, которая доходит до (но не включая) разделяющего "
.