2013-07-06 2 views
1

То, что я пытаюсь сделать, очень просто. К сожалению, я не могу заставить его работать на газе. (! Многих) Теперь я буду смущать себя и после моей последней попытки:Поиск/поиск текста для оператора if

 var ss = SpreadsheetApp.getActiveSpreadsheet(); // 
     var findVal = ss.getRange("A1").getValue() 
     if (findVal.findText("8762", "#N/A")); 
     { 
     // do something 
     } 
     else { 
     // do something else 
     } 

Я просто смотрю искать в конкретной ячейке для существования любого числа 8762 среди большого абзаца текста , или строка # N/A, которая будет единственным текстом в ячейке. (FYI: # N/A не является результатом формулы. Это фактический текст).

И, очевидно, я пытаюсь использовать результат этого «поиска» в качестве драйвера для условного оператора.

Я не болванка в мире VBA, но javascript в настройке таблицы может заставить меня чувствовать себя очень глупо. Например, прямо сейчас.

Btw, я действительно активно искал это решение. К сожалению, все, что я нашел, было частью больших запутанных упражнений, которые мутили воды для меня. Мне просто нужно базовое истинное/ложное решение, и больше ничего.

И да, я могу сделать легкую половину этого ...

var ss = SpreadsheetApp.getActiveSpreadsheet(); // 
    var findVal = ss.getRange("A1").getValue() 

    if (findVal == "#N/A") { 

    // do something 

    } 

    else { 

    // do something else 

} 

(только чтобы доказать, что я не ищу здесь подачку ... только руку помощи)

ответ

6

Хорошие попытки. Замечательно видеть, что вы пытаетесь. Я думаю, что вы ищете функцию String match. Это не относится к скрипту приложений, поэтому вы не найдете его в своей документации, а скорее на общих javascript-документах, например. on MDN.

if(findVal.match('8762') || findVal == '#N/A') { 
    //do something 
} else { 
    //do something else 
} 

Обратите внимание, что даже если мы проезжали строку в качестве параметра для функции match, она превращается в regular expression. Итак, хорошо, что вы быстро это изучите. Это может выглядеть слишком сложно, но очень полезно и довольно просто, как только вы овладеете им.

Другой способ сделать выше:

if(findVal.match(/8762|^#N\/A$/)) { 

А еще лучше, мы можем гарантировать, что ваш номер «в одиночку», а не часть большего числа, как и в 187621.

if(findVal.match(/\b8762\b|^#N\/A$/)) { 
+1

Отлично! Спасибо Энрике. Три предложения, которые на 2 больше, чем я мог надеяться! Тем не менее, я задаюсь вопросом, могу ли я немного поднять ваш мозг в отношении использования «труб», «каретки» и «\ b». Я уверен, что ежедневные javascriptеры используют их, даже не думая об этом, но это именно те типы тайн, которые не обладают интуитивным пониманием для тех, кто не знаком с их использованием. Если вы не возражаете, конечно. В противном случае спасибо вам спасибо за вашу помощь независимо. – 5th4x4

+0

@ 5th4x4 - 100% согласны с вами ... regex - это кошмар, чтобы понять, но статья, которую Henrique дал в качестве ссылки, действительно полезна ... это позволило мне сделать несколько действительно хороших вещей! Итак, я, которому вам повезло :-) –

+0

Двойные трубы в 'if' просто равны [предложение OR] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators). Труба внутри регулярного выражения также означает OR. Но обратите внимание, что один канал не в регулярном выражении (чего не бывает в этих примерах) является [двоичный оператор] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/ Bitwise_Operators), а не OR. Специальные символы регулярного выражения лучше объясняются на ссылке MDN, помещенной в ответ. –

Смежные вопросы