Проблема с getDisplayValue Возврат объекта? - PullRequest
1 голос
/ 30 октября 2019

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

В основном пытался проверить и посмотреть, есть ли уже дата в ячейке, и если да, просто вернуть. Но по какой-то причине он не выполняет сравнение строк должным образом. Он никогда не распознает его как пустую строку. Затем я пытаюсь использовать include (), он говорит мне, что include () нельзя использовать на объекте. Насколько я понимаю, getDisplayValue () всегда должен возвращать строку? Немного в замешательстве.

function getDate(progress) {
 //progress: cell showing progress state (Not started, begun, completed)

  var range = SpreadsheetApp.getActiveRange();
  var d = range.getDisplayValue();

  if(progress == 'Completed') { return 'done'; } 
  if(d != '') { return; } //if due date cell already has a date, don't change it
  today = new Date();
  due = new Date();
  due.setDate(today.getDate() + 7); //one week from today
  return due;
}

Есть идеи, в чем проблема с этим кодом? Или откройте другое решение, если есть что-то более элегантное.

1 Ответ

1 голос
/ 30 октября 2019
  • Вы хотите запустить скрипт, если значением активного диапазона является объект даты.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

Еслимое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Точка модификации:

  • Чтобы подтвердить, является ли значение активного диапазона объектом даты, я использовал getValue()для получения значения и Object.prototype.toString.call(d).slice(8, -1) == 'Date' для оператора if.

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

function getDate(progress) {
  Utilities.sleep(5000); // <--- Added

 //progress: cell showing progress state (Not started, begun, completed)

  var range = SpreadsheetApp.getActiveRange();
  var d = range.getValue(); // Modified

  if(progress == 'Completed') { return 'done'; } 
  if (d && Object.prototype.toString.call(d).slice(8, -1) == 'Date') { return; } // Modified
  today = new Date();
  due = new Date();
  due.setDate(today.getDate() + 7); //one week from today
  return due;
}
  • Когдазапускается функция getDate, если значение, полученное с помощью getValue(), является объектом даты, Object.prototype.toString.call(d).slice(8, -1) == 'Date' возвращает true. Поэтому скрипт ниже оператора if не выполняется.

Ссылки:

Если я неправильно понял ваш вопрос и это не тот результат, который вам нужен, я приношу свои извинения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...