正在尝试将 Google Sheets moveTo 脚本转换为 copyTo 脚本
Trying to convert Google Sheets moveTo script to copyTo script
在我的小部门,我们目前有一个简单的票务系统,用户填写 google 表格来请求服务,然后将票添加到 google sheet我们在办公室的工作电脑和显示器上保存这些信息。
我正在尝试制作一个脚本,在其中单击复选框时,会在特定列上创建时间戳,然后将一个 sheet 上的行移至另一个 sheet,其中 "Completed Tickets" 已存档。
我已经能够让脚本完全使用时间戳,并且我已经能够让移动部分完全使用 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()
您可以将响应 sheet 中的行复制到目标 sheet,然后从响应 sheet 中删除行。
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);
}
在我的小部门,我们目前有一个简单的票务系统,用户填写 google 表格来请求服务,然后将票添加到 google sheet我们在办公室的工作电脑和显示器上保存这些信息。
我正在尝试制作一个脚本,在其中单击复选框时,会在特定列上创建时间戳,然后将一个 sheet 上的行移至另一个 sheet,其中 "Completed Tickets" 已存档。
我已经能够让脚本完全使用时间戳,并且我已经能够让移动部分完全使用 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()
您可以将响应 sheet 中的行复制到目标 sheet,然后从响应 sheet 中删除行。
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);
}