применение функции ClearContents на основе другого значения ячейки - PullRequest
0 голосов
/ 21 июня 2019

У меня есть лист Google, который используется многими людьми каждый день, и этот лист должен "перезагружаться" и "резервироваться" каждый конец дня.До сих пор я делал это, используя функцию ClearRange и функцию MakeCopy, которая сохраняла весь файл в другой моей папке с листом Google.Эти функции работают по временному триггеру, который, по моему мнению, больше не актуален для меня, и я хочу активировать их с помощью функции OnEdit, которая будет основываться на значении ячейки и своего рода «меню», которое будет работать и для пользователей Android.

Это то, что я делал до сих пор, основываясь на триггере времени:

function clearRange() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('work_sheet');
  sheet.getRange('A5:L200').clearContent();
  sheet.getRange('O5:P200').clearContent();
}



function makeCopy() {
// generates the timestamp and stores in variable formattedDate as year-month-date hour-minute-second
var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd' 'HH:mm:ss");

// gets the name of the original file and appends the word "copy" followed by the timestamp stored in formattedDate
var name = SpreadsheetApp.getActiveSpreadsheet().getName() + " Copy " + formattedDate;

// gets the destination folder by their ID. REPLACE xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx with your folder's ID that you can get by opening the folder in Google Drive and checking the URL in the browser's address bar
var destination = DriveApp.getFolderById("xxxxxxxxx(my google sheet folder URL)");

// gets the current Google Sheet file
var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())

// makes copy of "file" with "name" at the "destination"
file.makeCopy(name, destination);
}

Я нашел несколько кодов, которые пытался применить к своей функции, но безуспешно:

var FunctionsCell = "B2"  // global
function onEdit(e) {    
  var editCell = e.range.getA1Notation()

switch (editCell) {
case FunctionsCell: {               
      var functionType = SpreadsheetApp.getActiveSheet().getRange(FunctionsCell).getValue()

      switch(functionType) {              
        case "Do Task 1": {
          // do something
          break
        }
        case "Do Task 2": {
          // do something
          break
        }
      }
  }
  }
}

(на этом он выдает ошибку об "var editCell = e.range.getA1Notation ()"

, и этот работает только тогда, когда я не задаю определенный диапазон

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

  if(cellContent === 100) {
    sheet.getRange('A5:L10').clearContents()
  }
}

Мне бы хотелось, чтобы это было меню для пользователей Android, чтобы они нажимали на опции или писали конкретные слова, чтобы эти две функции работали. Спасибо, ребята

1 Ответ

1 голос
/ 21 июня 2019

Мне понадобится значительно больше деталей, чтобы завершить это.Но этот подход должен работать.Помните, что вы не можете вызывать эти функции из редактора сценариев или запускать их из меню.Вы должны запустить их с триггером onEdit (), чтобы объект события присутствовал.Отладка такого рода может быть трудной и часто приводит к улучшению ваших навыков устранения неполадок или, возможно, просто заставляет вас сдаться.

function onEdit(e) {    
  var sh=e.range.getSheet();
  var name=sh.getName();
  if(name !='Sheet1') return;//limits the functionality to one sheet
  switch (e.range.getA1Notation()) {
    case 'B2': {               
      var functionType = e.range.getSheet().getRange("B2").getValue()
      switch(functionType) {              
        case "task1": {
          // do something
          break
        }
        case "task2": {
          // do something
          break;
        }
      }
    }
  }
}
...