Строка, которую он ищет (A2):
<Column Name = "Col1" Type = "System.Int32" DbType = "Int NOT NULL" CanBeNull = "false" />
=SWITCH(A2, ISNUMBER(FIND("Int32", A2)), "Int32", ISNUMBER(FIND("DateTime", A2)), "DateTime", ISNUMBER(FIND("String", A2)), "String", ISNUMBER(FIND("Double", A2)), "Double", ISNUMBER(FIND("Decimal", A2)), "Decimal", ISNUMBER(FIND("Boolean", A2)), "Boolean")
Он должен вернуть Int32, но вместо этого возвращает #N/A
.
Почему?
Используйте TRUE
в качестве первого аргумента:
=SWITCH(TRUE, ISNUMBER(FIND("Int32", A2)), "Int32", ISNUMBER(FIND("DateTime", A2)), "DateTime", ISNUMBER(FIND("String", A2)), "String", ISNUMBER(FIND("Double", A2)), "Double", ISNUMBER(FIND("Decimal", A2)), "Decimal", ISNUMBER(FIND("Boolean", A2)), "Boolean")
Проблема в том, что в его текущей форме вы пытаетесь сравнить весь текст A2
с результатом ISNUMBER(FIND())
, который является логическим значением.
Другой вариант IFS
:
=IFS(ISNUMBER(FIND("Int32", A2)), "Int32", ISNUMBER(FIND("DateTime", A2)), "DateTime", ISNUMBER(FIND("String", A2)), "String", ISNUMBER(FIND("Double", A2)), "Double", ISNUMBER(FIND("Decimal", A2)), "Decimal", ISNUMBER(FIND("Boolean", A2)), "Boolean")
но... гораздо более приятное решение от @ScottCraner с использованием LET
и FILTER
:
=@LET(x,{"Int32","DateTime","String","Double","Decimal","Boolean"},FILTER(x,ISNUMBER(FIND(x,A2))))
Ваши данные имеют формат xml, вы можете использовать функцию FILTERXML, например,
В B2
введите формулу:
=FILTERXML(SUBSTITUTE(A2,"System.",""),"//@Type")
Даже лучше, очень красиво.