根据 3 列之间的匹配移动行
Move Rows based on matches between 3 columns
我的目标是将 数据 选项卡中的条目、名字、姓氏和出生日期与另一个名为 [=27 的选项卡上的相同列进行比较=]完成并从数据选项卡中删除匹配行。
在另一个选项卡上标记一个复选框 New Cases 应该可以找到 Data 上的行,将该行移动到 Completed ,并清除 New Cases 上的复选框。
https://docs.google.com/spreadsheets/d/1sVVzW4Ga6XzYrGS-7AqwdMCqeL1-IxzRVSHG2FxMCog/edit?usp=sharing
我找到了几个接近我想要的脚本,并将它们复制到 sheet,但我没有专业知识来获得任何一个 (Move row based on cell selection) or (https://support.google.com/docs/thread/39992635?msgid=40432488) 来完成解决方案.
我能够让这样的东西工作,但它只工作了一次,而且我只能让它从(新案例)移动一行到(已完成)。
function onEdit(event) {
// assumes source data in sheet named New Cases
// target sheet of move to named Completed
// getColumn with check-boxes is currently set to colu 21 or V
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "New Cases" && r.getColumn() == 21 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Completed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
编辑:我正在尝试从“数据”中获取任何行,其中 C、D 和 E 列与“已完成”中的任何行匹配,以自动删除“数据”sheet。
然后,当 V 列中的“新案例”复选框被选中时,它将匹配行从“数据”移至“已完成”并取消选中“新案例”复选框,以便为下一个条目做好准备.
Select 新案例上的复选框查找数据上的行将数据行移动到已完成
删除数据行并重置新案例的复选框。
function onEdit(e) {
const nsh = e.range.getSheet();
if (nsh.getName() == "New Cases" && e.range.columnStart == 22 && e.range.rowStart > 1 && e.value() == "TRUE") {
const nrg = nsh.getRange(e.range.rowStart, 1, 1, nsh.getLastColumn());
const nvs = nrg.getValues().flat();//row
const dsh = e.source.getSheetByName("Data");
const dvs = dsh.getRange(2, 1, dsh.getLastRow() - 1, dsh.getLastColumn()).getValues();
const csh = e.source.getSheetByName("Completed");
const tgt = csh.getRange(csh.getLastRow() + 1, 1);
for (let i = 0; i < dvs.length; i++) {
if (dvs[i][2] == nvs[2] && dvs[i][3] == nvs[3] && dvs[i][4] == nvs[4]) {
let drg = dsh.getRange(i + 1, 1, 1, dsh.getLastColumn());
drg.copyTo(tgt);
dsh.deleteRow(i + 1);
break;
}
}
e.range.setValue("FALSE");//reset the checkbox
//e.range.offset(0,1).setValue(new Date());//you should consider doing this so that you know that it has been moved. The way it setup now it would put the timestamp in column W
}
}
我的目标是将 数据 选项卡中的条目、名字、姓氏和出生日期与另一个名为 [=27 的选项卡上的相同列进行比较=]完成并从数据选项卡中删除匹配行。
在另一个选项卡上标记一个复选框 New Cases 应该可以找到 Data 上的行,将该行移动到 Completed ,并清除 New Cases 上的复选框。
https://docs.google.com/spreadsheets/d/1sVVzW4Ga6XzYrGS-7AqwdMCqeL1-IxzRVSHG2FxMCog/edit?usp=sharing
我找到了几个接近我想要的脚本,并将它们复制到 sheet,但我没有专业知识来获得任何一个 (Move row based on cell selection) or (https://support.google.com/docs/thread/39992635?msgid=40432488) 来完成解决方案.
我能够让这样的东西工作,但它只工作了一次,而且我只能让它从(新案例)移动一行到(已完成)。
function onEdit(event) {
// assumes source data in sheet named New Cases
// target sheet of move to named Completed
// getColumn with check-boxes is currently set to colu 21 or V
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "New Cases" && r.getColumn() == 21 && r.getValue() == true) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Completed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
编辑:我正在尝试从“数据”中获取任何行,其中 C、D 和 E 列与“已完成”中的任何行匹配,以自动删除“数据”sheet。
然后,当 V 列中的“新案例”复选框被选中时,它将匹配行从“数据”移至“已完成”并取消选中“新案例”复选框,以便为下一个条目做好准备.
Select 新案例上的复选框查找数据上的行将数据行移动到已完成
删除数据行并重置新案例的复选框。
function onEdit(e) {
const nsh = e.range.getSheet();
if (nsh.getName() == "New Cases" && e.range.columnStart == 22 && e.range.rowStart > 1 && e.value() == "TRUE") {
const nrg = nsh.getRange(e.range.rowStart, 1, 1, nsh.getLastColumn());
const nvs = nrg.getValues().flat();//row
const dsh = e.source.getSheetByName("Data");
const dvs = dsh.getRange(2, 1, dsh.getLastRow() - 1, dsh.getLastColumn()).getValues();
const csh = e.source.getSheetByName("Completed");
const tgt = csh.getRange(csh.getLastRow() + 1, 1);
for (let i = 0; i < dvs.length; i++) {
if (dvs[i][2] == nvs[2] && dvs[i][3] == nvs[3] && dvs[i][4] == nvs[4]) {
let drg = dsh.getRange(i + 1, 1, 1, dsh.getLastColumn());
drg.copyTo(tgt);
dsh.deleteRow(i + 1);
break;
}
}
e.range.setValue("FALSE");//reset the checkbox
//e.range.offset(0,1).setValue(new Date());//you should consider doing this so that you know that it has been moved. The way it setup now it would put the timestamp in column W
}
}