0
我有两张不同的纸张,第一张是我所有数据存储和更改的位置。在更新第一张纸时,它会移至第二张纸上。我试图弄清楚,如果更新后,我可以从第二张表中移动一行到第二张表格中的另一个表格,基于列Q或列17中的数据。这是我目前拥有的,但它不似乎在移动任何东西。这甚至有可能吗?我可以移动从其他工作表更新的行吗?
function onUpdate() {
var sheetNameToWatch = "Raw Data";
var columnNumberToWatch = 17; // column A = 1, B = 2, etc.
var valueToWatch = ["Full", "Partial", "Process", "Conditional", "Fail", "Exemption"];
var sheetNameToMoveTheRowTo = (valueToWatch + " Certification");;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
谢谢。
好吧,我已经更新了当前脚本:
function onUpdate() {
var sourceSheet = "Raw Data";
var columnNumberToWatch = 17; // column A = 1, B = 2, etc.
var valueToWatch = ["Full", "Partial", "Process", "Conditional", "Fail", "Exemption"];
var sheetNameToMoveTheRowTo = (valueToWatch + " Certification");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName() === sourceSheet && range.getColumn() === columnNumberToWatch && checkMatch(range.getValue(), valueToWatch) === true) {
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
function checkMatch(value, array) {
for (i in array) {
if (value === array[i]) {
return(true);
}
}
}
好吧,
我想更多的指定一点吧:
function onEdit() {
var sourceSheet = "Raw Data";
var columnNumberToWatch = 17; // column A = 1, B = 2, etc.
var valueToWatch = ["Full", "Partial", "Process", "Conditional", "Fail", "Exemption"];
var sheetNameToMoveTheRowTo = (valueToWatch + " Certification");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
var cert = range.getValue();
if (valueToWatch.indexOf(cert) === sourceSheet && range.getColumn() === columnNumberToWatch && checkMatch(range.getValue(), valueToWatch) === true) {
var sheetNameToMoveTheRowTo = (cert + " Certification");
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
function checkMatch(value, array) {
for (i in array) {
if (value === array[i]) {
return(true);
}
}
}
通过定义证书,并试图更清楚地定义valueToWatch的数组。
感谢您的答复。我需要在第二个数组中定义数组还是值?我不会认为[]应该识别数组。但是,没有任何内容移动到相应的选项卡上。任何额外的想法? – baldalbino
您是否设置了onEdit触发器? –
你可以调用你的函数onEdit()而不是onUpdate()。 –