Задействащ скрипт по конкретна стойност на клетка

Аз съм доста нов в разработката на скриптове в Google Sheets и се чудя как да задействам скрипт clearAll със стойност на клетка, т.е. A1=100. Моят скрипт clearAll работи (вижте по-долу), въпреки че не знам какво да добавя към него, за да го задействам с помощта на конкретна стойност на клетка.

function clearAll() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var formresponses1 = ss.getSheetByName("formresponses1");
formresponses1.clearContents();}

Благодаря


person Joe W    schedule 03.10.2014    source източник


Отговори (2)


Ако се опитвате да направите така, че всеки път, когато някой постави стойността на "100", да изчиства съдържанието на целия лист, тогава можете да направите следното:

function onEdit(e) {
  var ss = SpreadsheetApp.getActive()          //gets the active spreadsheet
  var sheet = SpreadsheetApp.getActiveSheet()  //gets the active sheet
  var cell = ss.getActiveRange()               //gets the active cell
  var cellContent = cell.getValue()            //gets the value of the active cell

  if(cellContent === 100) {
    sheet.clearContents()                      //clears the values of the entire active sheet
  }
}

Ако искате да направите така, че когато някой редактира клетката и направи нейната стойност „100“, кодът да изчиства само тази клетка, направете следното:

function onEdit(e) {
  var ss = SpreadsheetApp.getActive()
  var sheet = SpreadsheetApp.getActiveSheet()
  var cell = ss.getActiveRange()
  var cellContent = cell.getValue()

  if(cellContent === 100) {
    cell.setValue("")              //clears the value of the active cell
  }
}

Разбира се, в последното, поради лекото изоставане в скриптовете на Google, ако някой бързо постави 100 във всяка клетка, която може, тогава някои от клетките със стойност "100" ще останат там, но ако човекът поставя стойностите в като нормален човек, а не като спамер, тогава този код ще работи.

Освен това, ако се опитвате да направите така, че ако стойността на определена клетка (т.е.: A1) е равна на "100", скриптът изчиства целия лист, направете следното:

function onEdit(e) {
  var ss = SpreadsheetApp.getActive()
  var sheet = SpreadsheetApp.getActiveSheet()
  var cell = sheet.getRange('A1')
  var cellContent = cell.getValue()

  if(cellContent === 100) {
    sheet.clearContents()
  }
}

Надявам се, че мога да помогна!

person Josh Smith    schedule 11.01.2015

Тригерът onEdit се изпълнява, когато която и да е клетка в електронната таблица е редактирана.

Документация на Google – електронна таблица при редактиране

Има и тригира за смяна. Това е инсталируем тригер, а не обикновен тригер.

Налични типове тригери

Цитат от документацията:

Инсталируем тригер за промяна се изпълнява, когато потребител модифицира структурата на самата електронна таблица - например чрез добавяне на нов лист или премахване на колона.

Мисля, че единственото нещо, което ще работи за вас, е тригерът При редактиране. Тригерът се настройва от менюто Ресурси в редактора на кода на скрипта на приложения.

Не мисля, че можете да ограничите изпълнението на кода само до определена клетка или определена стойност в клетка. Кодът ще се изпълнява всеки път, когато редактирате ВСЯКА клетка.

Мисля, че единствената друга алтернатива би била да стартирате тригер, базиран на времето, и скриптът да получи стойността на тази клетка и да провери стойността. Най-краткият интервал от време, който можете да използвате, е да изпълнявате скрипт всяка минута. Така че, ако редактирате клетката на секунда 1, ще отнеме още 59 секунди, преди да се случи нещо.

Ако имате някакъв тип потребителски интерфейс и стойността в тази клетка се записва, когато потребителят въведе стойност в поле за въвеждане, можете да откриете тази промяна веднага и да накарате нещо да се случи.

person Alan Wells    schedule 03.10.2014
comment
Ако този проблем 3496 беше разрешен можете да проверите коя клетка е задействала onEdit и просто да не върнете нищо, когато не е тази, която искате... за съжаление не е ... - person Serge insas; 06.10.2014
comment
Изглежда, че този проблем е приключен на 7 октомври 2014 г - person Alan Wells; 07.10.2014
comment
Наистина тази сутрин получих съобщение, че проблемът е решен. Благодаря, че го посочихте :-) - person Serge insas; 07.10.2014