Когда значения записываются в ячейку Google Sheet? - PullRequest
0 голосов
/ 08 февраля 2020

У меня странная проблема. Когда я набираю текст в ячейке Google Sheet, а затем запускаю собственный сценарий (ниже), чтобы получить эти значения, он не получает значения, которые я только что ввел. Значения становятся доступными только после того, как я отойду от этой ячейки (tab или enter).

var data = dataRange.getValues();

Я не уверен, когда значения действительно записываются в ячейку. Если я сделаю сценарий перехода от этой ячейки (ниже), у меня возникнет та же проблема.

var newRange = sheet.getRange("C4"); sheet.setCurrentCell(newRange);

Можно ли записать все данные на лист?

Можно проверить с помощью этого кода. Напишите какой-нибудь текст в A1, запустите собственный скрипт и проверьте логи. Если вы не отойдете от A1 до запуска скрипта, журналы будут пустыми.

function moveTest(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var newRange = sheet.getRange("A2");
  sheet.setCurrentCell(newRange);
  var cellOfInterest = sheet.getRange("A1").getValue();
  Logger.log(cellOfInterest);
}

Редактировать: та же проблема с setActiveSelection вместо setCurrentCell

Ответы [ 2 ]

2 голосов
/ 09 февраля 2020

Когда значения записываются в ячейку Google Sheet?

Когда вы нажимаете клавишу табуляции, клавиши со стрелками, ввод или любой другой метод, который убирает фокус с ячейки, значение пишется или совершается.

0 голосов
/ 10 февраля 2020

Я не уверен, будет ли это работать для вас, но если вы проверяете 1 точную ячейку, оператор if, проверяющий, распознан ли ввод перед запуском скрипта, будет в порядке:


    function checkwritten(){
      var app = SpreadsheetApp;
      var ss = app.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var ui = SpreadsheetApp.getUi(); 
      var InterestCell = sheet.getRange("A1");
      var cellOfInterest = sheet.getRange("A1").getValue();

      if (InterestCell.isBlank()) {
        Logger.log("missing value");
        ui.alert('There are missing values');
      }
      else {
        Logger.log(cellOfInterest);
        /*
        enter code here
        */
      }
    }

Другие предлагаемые решения, такие как создание кнопки в качестве опции меню или отключение кнопки до заполнения всей записи, также являются жизнеспособными.

Если вы проверяете диапазон, возможны следующие две опции:

Вариант 1: создайте ячейку с контрбланком на вашем листе, и это будет интересующая ячейка.

function checkwritten(){
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var InterestCell = sheet.getRange("A6");
  var cellOfInterest = sheet.getRange("A6").getValue();

  if (cellOfInterest == 0) {
    Logger.log("success");
  }
  else {
    Logger.log(cellOfInterest);
    /*
    enter code here
    */

  }

}

Вариант 2 - разрешите сценарию убедиться, что до этого не было пустых ячеек работает.

function checkwritten(){
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var CellCheckCount = 100; // 1 above the total number of rows to check
  var ui = SpreadsheetApp.getUi();
  var BlankCellCount = 0;
  var CheckCell = null;

  for (var i = 1; i < CellCheckCount; i++){
    CheckCell = sheet.getRange(i,1); //currently set to check column 1 up till 100-1 row
    if (CheckCell.isBlank()){
        BlankCellCount++;
        }
    else{
        }
  }

  if (BlankCellCount == 0) {
    Logger.log("success");
    /*
    enter code here
    */
  }
  else {
    Logger.log("fail" + BlankCellCount);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...