Попытка конвертировать скрипт MoveTo из Google Sheets в скрипт copyTo - PullRequest
0 голосов
/ 05 марта 2019

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

Я пытаюсь создать сценарий, в котором при нажатии флажка создается метка времени для определенного столбца, а затем строка на одном листе перемещается на другой лист, где архивируются «Завершенные заявки».

Мне удалось заставить скрипт работать полностью с отметкой времени, и я смог заставить движущуюся часть работать полностью с функцией moveTo, но ТОЛЬКО при ручном вводе заявки. Если заявка отправляется с использованием форм Google, она блокирует использование команды moveTo, поскольку она позволяет только копировать и вставлять данные формы, а не вырезать и вставлять.

Итак, я пытаюсь преобразовать мой второй сценарий onEdit в copyTo, а не в moveTo. Однако, после многих попыток, я не могу заставить его работать. Я разместил скрипт у меня ниже. Любая помощь будет оценена.

function onEdit(event) {
  myFunction1(event);
}

function myFunction1(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var timezone = "GMT-7";
  var timestamp_format = "M-d-yyyy HH:MM:SS"; // Timestamp Format. 
  var updateColName = "Timestamp";
  var timeStampColName = "Completed";
  var sheet = event.source.getSheetByName('Form Responses 1'); //Name of the sheet where you want to run this script.
  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;

if(s.getName() == "Form Responses 1" && r.getColumn() == 11 && r.getValue() == true) {
    var cell = sheet.getRange(index, dateCol + 1);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  } //closes if statement operations; no close to myFunction1()

  function myFunction2() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var s = event.source.getActiveSheet();
    var r = event.source.getActiveRange();

if(s.getName() == "Form Responses 1" && r.getColumn() == 11 && r.getValue() == true) {
 var row = r.getRow();
 var numColumns = s.getLastColumn();
 var targetSheet = ss.getSheetByName("Completed Tickets");
 var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
 s.getRange(row, 1, 1, numColumns).moveTo(target);
 s.deleteRow(row);
    } //closes if statement operation
  } //closes myFunction2()
  myFunction2(); //calls myFunction2() so that it will run after myFunction1() code
} // closes myFunction1()

1 Ответ

0 голосов
/ 05 марта 2019

Вы можете скопировать строку из листа ответов на целевой лист, а затем удалить строку из листа ответов.

if (s.getName() == "Form Responses 1" && r.getColumn() == 11 && r.getValue() == true) {
  var cell = sheet.getRange(index, dateCol + 1);
  var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
  cell.setValue(date);
  // copy n delete
  var row = r.getRow();
  var numColumns = s.getLastColumn();
  var targetSheet = ss.getSheetByName("Completed Tickets");
  targetSheet.getRange(targetSheet.getLastRow() + 1, 1, 1, numColumns).setValues(s.getRange(row, 1, 1, numColumns).getValues());
  s.deleteRow(row);
}
...