【问题标题】:Trying to convert Google Sheets moveTo script to copyTo script尝试将 Google 表格 moveTo 脚本转换为 copyTo 脚本
【发布时间】:2019-03-05 16:48:56
【问题描述】:

在我的小部门中,我们目前有一个简单的票务系统,用户填写谷歌表格以请求服务,然后将票证添加到谷歌表格中,我们在工作 PC 上跟踪该表格并显示在我们的办公室中。

我正在尝试编写一个脚本,当单击复选框时,会在特定列上创建一个时间戳,然后将一个工作表上的行移到另一个工作表上,其中“已完成的票证”被存档。

我已经能够让脚本完全使用时间戳,并且我已经能够让移动部分完全使用 moveTo 功能,但只有当您手动输入票证时。如果工单是使用谷歌表单提交的,它会阻止使用 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()

【问题讨论】:

    标签: google-apps-script google-sheets documentation


    【解决方案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);
      // 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);
    }
    

    【讨论】:

    • 这非常有效。非常感谢您的帮助!
    • 很高兴能够提供帮助!
    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    相关资源
    最近更新 更多