Скрипт приложения Google проверяет, содержит ли отредактированная ячейка пробел

#javascript #regex #if-statement #google-apps-script #google-sheets

#javascript #регулярное выражение #if-оператор #google-apps-script #google-sheets

Вопрос:

Следующий код не работает, когда я помещаю значение с пробелом в editedCellValue

 function onEdit(e) {

    var editedCellRange = 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test").getActiveRange();
    var editedCellValue = 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test").getActiveRange().getValue;
    if (RegExp(editedCellValue).test("s")==true){editedCellRange.setValue("contains space")}
    else 
    {editedCellRange.setValue("ELSE IF")}
}
 

Пожалуйста, помогите, почему это не работает.

Спасибо.

Ответ №1:

Точки изменения:

  • Если вы хотите использовать test , пожалуйста, измените на (/s/g).test(editedCellValue) .
  • Например, вы также можете использовать includes like editedCellValue.includes(" ") . А также indexOf может быть использован.
  • В вашей ситуации, я думаю, что объект event также может быть использован.
  • В вашем скрипте var editedCellValue = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test").getActiveRange().getValue; значение не извлекается, поскольку getValue не выполняется. Пожалуйста, поставьте () лайк getValue() .
  • Вы можете объявить его SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test") .

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

Модифицированный скрипт:

 function onEdit(e) {
  var range = e.range;
  if (range.getSheet().getSheetName().toLowerCase() != "test") return;
  var editedCellValue = range.getValue();
  if ((/s/g).test(editedCellValue)) {  // or if (editedCellValue.includes(" ")) {
    range.setValue("contains space")
  } else {
    range.setValue("ELSE IF")
  }
}
 
  • В этом случае при редактировании ячейки onEdit автоматически запускается триггер onEdit. И в вашем скрипте отредактированная ячейка перезаписывается. Пожалуйста, будьте осторожны с этим.

Примечание:

  • Если вы хотите напрямую запустить функцию с помощью редактора сценариев, пожалуйста, измените приведенный выше сценарий следующим образом.
    • От
         var range = e.range;
        if (range.getSheet().getSheetName().toLowerCase() != "test") return;
       
    • Для
         var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Test").getActiveRange();
       

Ссылки:

Комментарии:

1. Спасибо! (/s/g).test(editedCellValue) работает.

2. @user13854773 Спасибо за ответ. Я рад, что ваша проблема была решена. Теперь я подумал, что в вашей ситуации (/s/).test(editedCellValue) это также можно использовать.

3. Также ценю совет по очистке кода, не повторяясь.