在我的小部门中,我们目前有一个简单的票务系统,用户在其中填写Google表单以请求服务,然后将该票证添加到Google工作表中,我们将其保存在工作PC上并显示在办公室中。
我正在尝试创建一个脚本,在该脚本中,单击复选框时,将在特定列上创建时间戳,然后将一张纸上的行移到另一张纸上,其中已存储“已完成的票证”。
我已经能够使脚本与时间戳完全兼容,并且我能够使移动部分与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()
答案 0 :(得分:0)
您可以将响应表中的行复制到目标表,然后从响应表中删除行。
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);
}