当列表满足条件时替换单元格中的数据
Replacing data in a cell when a criteria is met with a list
我希望能够用列表替换单元格的内容。
目前,我在第一列中有一个下拉列表,当用户选择“接受”时,它会将该行复制到另一个 sheet 并删除旧行。
但是,在新位置,它复制了先前位置(第一列)的下拉列表,该位置覆盖了新的下拉列表(在 sheet 2 的第一列)列表包含完成、取消。
我正在尝试检测“接受”一词并使用包含“完成”和“取消”选项的列表覆盖文件,或者复制不包括第一列的整行。
下面是我当前的代码。我今天才开始使用 Google 脚本,所以我对这段代码的了解非常有限。到目前为止,我发现的所有内容都来自 google 搜索和一点点运气。
在此先感谢您的帮助。
function onEdit(event)
{
// assumes source data in sheet named Form responses 1
// target sheet of move to named Commissions in review
// test column with yes/no is col 4 or D
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Form responses 1" && r.getColumn() == 1 && r.getValue() != "")
{
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Commissions in review");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 2);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
if(s.getName() == "Commissions in review" && r.getColumn() == 1 && r.getValue() == "Accept")
{
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Accepted Work list");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
if(s.getName() == "Commissions in review" && r.getColumn() == 1 && r.getValue() == "Delete")
{
var row = r.getRow();
var numColumns = s.getLastColumn();
s.deleteRow(row);
}
}
不能只更改列的起点吗?现在您的范围引用从第 1 列开始:
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
也许试试:
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 2);
s.getRange(row, 2, 1, numColumns-1).moveTo(target);
目标从第 2 列开始。范围从第 2 列开始,numColumns 减 1。
我希望能够用列表替换单元格的内容。
目前,我在第一列中有一个下拉列表,当用户选择“接受”时,它会将该行复制到另一个 sheet 并删除旧行。
但是,在新位置,它复制了先前位置(第一列)的下拉列表,该位置覆盖了新的下拉列表(在 sheet 2 的第一列)列表包含完成、取消。
我正在尝试检测“接受”一词并使用包含“完成”和“取消”选项的列表覆盖文件,或者复制不包括第一列的整行。
下面是我当前的代码。我今天才开始使用 Google 脚本,所以我对这段代码的了解非常有限。到目前为止,我发现的所有内容都来自 google 搜索和一点点运气。
在此先感谢您的帮助。
function onEdit(event)
{
// assumes source data in sheet named Form responses 1
// target sheet of move to named Commissions in review
// test column with yes/no is col 4 or D
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Form responses 1" && r.getColumn() == 1 && r.getValue() != "")
{
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Commissions in review");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 2);
s.getRange(row, 1, 1, numColumns).copyTo(target);
}
if(s.getName() == "Commissions in review" && r.getColumn() == 1 && r.getValue() == "Accept")
{
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Accepted Work list");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
if(s.getName() == "Commissions in review" && r.getColumn() == 1 && r.getValue() == "Delete")
{
var row = r.getRow();
var numColumns = s.getLastColumn();
s.deleteRow(row);
}
}
不能只更改列的起点吗?现在您的范围引用从第 1 列开始:
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
也许试试:
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 2);
s.getRange(row, 2, 1, numColumns-1).moveTo(target);
目标从第 2 列开始。范围从第 2 列开始,numColumns 减 1。