[英]Delete a row in google spreadsheet based on value contained in a cell in row
[英]Moving a row on google spreadsheet based on 1 cell and verifying second cell is not blank
我是Google表格腳本的新手,我正在嘗試修改當前腳本,該腳本基於第20列中的“ y”或“ n”值將同一工作簿中的行從一張工作表移動到另一張工作表。新腳本仍將查看第20列中的“ y”或“ n”,但我希望它也查看第19列以驗證那里是否有值。 到目前為止,這是我的代碼,但無法正常工作:
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = SpreadsheetApp.getActiveSheet();
var r = SpreadsheetApp.getActiveRange();
if (s.getName() == "2018 2 Week Snapshot for Jim"
&& r.getColumn() == 20
&& r.getValue() == "y") {
if (s.getName() == "2018 2 Week Snapshot for Jim"
&& r.getColumn() == 19
&& r.getValue(r.isBlank()) == false) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Reviewed 2018 2 Week Snapshot for Jim");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
if (s.getName() == "2018 2 Week Snapshot for Jim"
&& r.getColumn() == 20
&& r.getValue() == "n") {
if(s.getName() == "2018 2 Week Snapshot for Jim"
&& r.getColumn() == 19
&& r.getValue(r.isBlank()) == false) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Reviewed 2018 2 Week Snapshot for Jim");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
}
問題的症結在於,不是使用直接獲取要查看的范圍,而是使用活動范圍( var r = SpreadsheetApp.getActiveRange();
),並在兩個嵌套的if
語句中檢查該范圍是否為無論是第19行還是第20行, 以及該范圍是否均為空白且包含某些內容(“ y”或“ n”)。 換句話說,為了進入您的第一段代碼,必須符合以下條件:
s.getName() == "2018 2 Week Snapshot for Jim"
&& r.getColumn() == 20
&& r.getValue() == "y") {
&& s.getName() == "2018 2 Week Snapshot for Jim"
&& r.getColumn() == 19
&& r.getValue(r.isBlank()) == false
不用說這在邏輯上是有問題的:-)
r.getValue(r.isBlank()) == false
, r.getValue(r.isBlank()) == false
沒有多大意義-如果您要查找第19 r.isBlank()
空白,則可能希望r.isBlank()
。 我的回答反映了這一點,如果我弄錯了,您應該將這種情況反轉。
我還注意到,無論您在第20列中找到的是“ y”還是“ n”,您的操作看起來都是相同的:無論哪種情況,您都將刪除原始行並將其粘貼到“ Jim的2018年回顧2周快照”中。 我的答案保留了區別,因為我認為您還想在看到ay / n的前提下做其他事情。
無論如何,這應該可以完成我認為您要嘗試執行的操作(請注意所有注意事項?:D)
function onEdit() {
var r = SpreadsheetApp.getActiveRange(); // The range being edited
var s = r.getSheet(); // Its sheet
if (s.getName() != "2018 2 Week Snapshot for Jim") {
// We're not editing the sheet we're interested in...
return;
}
var activeRow = r.getRow(); // What row number are we on?
var colNineteenNotBlank = !s.getRange(activeRow, 19).isBlank(); // Or did you need this *not* to be blank?
var colTwentyValue = s.getRange(activeRow, 20).getValue();
var numColumns = s.getLastColumn();
var sourceRange = s.getRange(activeRow, // start this row
1, // start column 1 (A)
1, // range should be 1 row
numColumns); // range should be this many columns
var targetSheet = ss.getSheetByName("Reviewed 2018 2 Week Snapshot for Jim");
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1,
1,
1,
numColumns);
if (colTwentyValue == "y" && colNineteenNotBlank) {
sourceRange.moveTo(targetRange);
} else if (colTwentyValue == "n" && colNineteenNotBlank) {
// maybe you wanted something else here?
sourceRange.moveTo(targetRange);
}
}
這仍然不是防彈的。 如果目標工作表已滿,我不確定在工作表的“結束”范圍之外進行調整是否可行。 如果很常見,我將檢查targetSheet.getMaxRow()
和targetSheet.getLastRow()
匹配,如果匹配,請執行targetSheet.appendRow()
。
要使用“基於活動單元”解決方案,您需要利用onEdit
事件的e
參數。
檢查該范圍是否是您要測試的范圍,然后測試該值是否正確,然后檢查另一個范圍的相同內容(在此情況下為列S)。
您會后檢查moveTo
至目的地的電子表格,並刪除移動一行。
該代碼將執行以下操作:
function onEdit(e)
{
if (e.range.getColumn() == 20)
{
if(e.value == "Y" || e.value == "N" || e.value == "y" || e.value == "n" )
{
var val = e.source.getActiveSheet().getRange("S" + e.range.getRow()).getValue();
if (val == "Y" || val == "y" || val == "N" || val == "n")
{
var destSheetName = "Reviewed 2018 2 Week Snapshot for Jim";
var destSheet = e.source.getSheetByName(destSheetName);
e.source.getActiveSheet().getRange(e.range.getRow(), 1, 1, e.source.getActiveSheet().getLastColumn()).moveTo(destSheet.getRange(destSheet.getLastRow() + 1 , 1, 1, e.source.getActiveSheet().getLastColumn()));
e.source.getActiveSheet().deleteRow(e.range.getRow());
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.