Google apps script 在同一电子表格的另一张图纸上删除基于行的单元格外编辑
我有一个名为脚本测试的谷歌电子表格,有两个名为delete和nondelete的表格 如果通过下拉菜单将非删除栏B中的一行更改为“删除”,则删除栏B中具有相同购买编号的行 我试过的 What have work=通过研究堆栈,我发现了一个onEdit函数,该函数根据单元格是否具有特定值来删除delete中的一行。在本例中,该值为“DELETE”。问题是,只有当该单元格位于“工作表删除”而不是“工作表非删除”上时,我才能使其工作。如果我正在使用非删除功能,并且需要返回“删除”以删除一行信息,我可以右键单击行号并手动删除它。所以,这个脚本并不一定能帮我节省时间。 该脚本如下所示: What has not worked=我稍微修改了一下脚本,让它在delete时读取F列,在F列中,我在non delete中有一个与B列的索引匹配。但是,当Col F更改为“delete”时,这不会删除delete上的行。现在我并不是百分之百的关注这个问题,但我可以推断这是因为F列没有被编辑,而是它里面的公式正在更新。我也尝试过摆弄在堆栈上找到的其他脚本,但似乎没有一个能像上面的脚本那样让我接近 要考虑的事情 首先,谢谢你们能给我的任何帮助。在发布这个问题之前,我遇到了一个过滤函数,如果我对索引匹配的看法是正确的,我认为它可能是一个方向。我发现了一个基于过滤器隐藏行的函数,但是我需要删除该行,所以我假设这就像用deleteRows切换hiderow一样简单。我试着添加我需要做的截图,但我没有足够的声誉。如果有帮助的话,我可以也将添加一个链接到电子表格的副本。再次感谢您的提示和指导。 使用getSheetByName方法获取删除工作表 如果您只需要一个单独的函数来删除行,可以在主函数中检查“删除”文本,并将行号传递给删除函数: 我已经测试了下面的代码,它是有效的。当下拉列表用于在“非删除”工作表中选择“删除”时,它将删除“删除”工作表中的相应行 我对代码做了多次更改。即使此代码删除工作表中与编辑位置不同的行,仍然存在潜在问题。删除“删除”工作表中的一行后,这些行将移动。如果开始删除顶部或中间的行,则已删除行下方的每一行不再与“删除”工作表中的行同步 这回答了你的问题,但现在你又遇到了另一个问题Google apps script 在同一电子表格的另一张图纸上删除基于行的单元格外编辑,google-apps-script,google-sheets,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Spreadsheet Api,我有一个名为脚本测试的谷歌电子表格,有两个名为delete和nondelete的表格 如果通过下拉菜单将非删除栏B中的一行更改为“删除”,则删除栏B中具有相同购买编号的行 我试过的 What have work=通过研究堆栈,我发现了一个onEdit函数,该函数根据单元格是否具有特定值来删除delete中的一行。在本例中,该值为“DELETE”。问题是,只有当该单元格位于“工作表删除”而不是“工作表非删除”上时,我才能使其工作。如果我正在使用非删除功能,并且需要返回“删除”以删除一行信息,我可以
function onEdit(e) {
try {
var ss = e.source;
var s = ss.getActiveSheet();
var colStart = e.range.columnStart;
var colEnd = e.range.columnEnd;
Logger.log('colStart: ' + colStart);
Logger.log('colEnd: ' + colEnd);
var thisRow = e.range.getRow();
Logger.log('s: ' + s.getName());
//Avoid looking at multi column edits. If column start and column end is same column,
//then not a multi column edit
var editedFromNonDelete = (s.getName() === 'non delete');
Logger.log('editedFromNonDelete: ' + editedFromNonDelete);
var editedFromColB = (colEnd === 2) && (colStart === colEnd);
// only look at edits happening in col B
if (editedFromNonDelete && editedFromColB) {
Logger.log('e.value: ' + e.value);
if (e.value === 'DELETE') {
fncDeleteRow(thisRow);
};
}
} catch (error) {
Logger.log(error);
}
};
function fncDeleteRow(argRowToDelete) {
var toDeltSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("delete");
toDeltSheet.deleteRow(argRowToDelete);
};
在测试了过滤函数几分钟之后,我已经基本上完成了我需要的工作。无论如何谢谢你 是的,所以那个新问题肯定是个问题。删除时的购买编号可能永远不会与非删除时的编号对齐,因此在删除时删除同一行是不好的。但是,你把我推向了我的最终目标,所以我真的很感激!我来看看我能摆弄什么。
function checkCellValue(argRowToDelete) {
if (e.value == 'DELETE') {
var toDeltSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("delete");
toDeltSheet.deleteRow(argRowToDelete);
}
}
function onEdit(e) {
try {
var ss = e.source;
var s = ss.getActiveSheet();
var colStart = e.range.columnStart;
var colEnd = e.range.columnEnd;
Logger.log('colStart: ' + colStart);
Logger.log('colEnd: ' + colEnd);
var thisRow = e.range.getRow();
Logger.log('s: ' + s.getName());
//Avoid looking at multi column edits. If column start and column end is same column,
//then not a multi column edit
var editedFromNonDelete = (s.getName() === 'non delete');
Logger.log('editedFromNonDelete: ' + editedFromNonDelete);
var editedFromColB = (colEnd === 2) && (colStart === colEnd);
// only look at edits happening in col B
if (editedFromNonDelete && editedFromColB) {
Logger.log('e.value: ' + e.value);
if (e.value === 'DELETE') {
fncDeleteRow(thisRow);
};
}
} catch (error) {
Logger.log(error);
}
};
function fncDeleteRow(argRowToDelete) {
var toDeltSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("delete");
toDeltSheet.deleteRow(argRowToDelete);
};