我有两个电子表格,一个电子表格称为“输入数据”,另一个电子表格称为“分配”。如果在“输入数据”的C列中未出现“分配”的C列中的值/内容(在我的情况下为名称),则该行将通过完全正常的公式删除:
function checkName() {
var s1 = SpreadsheetApp.getActive().getSheetByName("Input Data");
var col1 = s1.getRange("C3:C").getValues();
var s2 = SpreadsheetApp.getActive().getSheetByName("Assignment");
var col2 = s2.getRange("C4:C").getValues();
for (var i=col2.length-1; i>=0; i--) {
var found = false;
for (var j=0; j<col1.length; j++) {
if (col1[j][0] == col2[i][0]) {
found = true;
break;
}
}
if (!found) {
s2.deleteRow(i+4);
}
}
}
是否可以仅删除这些特定行的内容或仅删除这些特定行的特定列中的内容?例如,仅像第30行的A-F列(如果它符合我上面描述的标准)。我尝试了s2.deleteContents(i+4)
,但那确实行不通...您能帮我吗?
答案 0 :(得分:1)
如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。
在这种模式下,您的脚本已被修改。请按如下所示修改脚本。
s2.deleteRow(i+4);
至:
s2.getRange(i+4, 1, 1, 6).clearContent();
在这种模式下,首先要检索清除范围。并且范围列表由clearContent()
清除。流程成本可能可以降低一些。
function checkName() {
var s1 = SpreadsheetApp.getActive().getSheetByName("Input Data");
var col1 = s1.getRange("C3:C" + s1.getLastRow()).getValues().map(function(e) {return e[0]});
var s2 = SpreadsheetApp.getActive().getSheetByName("Assignment");
var col2Range = s2.getRange("A4:F" + s2.getLastRow());
var rangeList = col2Range.getValues().reduce(function(ar, e, i) {
if (col1.indexOf(e[2]) == -1) ar.push("A" + (i + 4) + ":F" + (i + 4));
return ar;
}, []);
// if (rangeList.length > 0) rangeList.push("A30:F30");
s2.getRangeList(rangeList).clearContent();
}
Like only column A-F of row 30 for example
,如果您还想清除“ A30:F30”的内容,请删除//
行中的// if (rangeList.length > 0) rangeList.push("A30:F30");
。这样,当发生上述情况时,“ A30:F30”的内容也被清除。但是关于这一点,我不确定我是否能正确理解您的目标。我为此表示歉意。如果我误解了您的问题,而这不是您想要的结果,我深表歉意。
Michael, Ballack
和Michael, BALLACK
作为相同的值。从您的答复中,我可以理解。对于上述情况,如何进行以下修改?在这种情况下,使用toUpperCase()
,可以比较来自Input Data
和Assignment
的两个值。
function checkName() {
var s1 = SpreadsheetApp.getActive().getSheetByName("Input Data");
var col1 = s1.getRange("C3:C").getValues();
var s2 = SpreadsheetApp.getActive().getSheetByName("Assignment");
var col2 = s2.getRange("C4:C").getValues();
var found;
for (var i=col2.length-1; i>=0; i--) {
found = false;
for (var j=0; j<col1.length; j++) {
if (col1[j][0].toUpperCase() == col2[i][0].toUpperCase()) { // Modified
found = true;
break;
}
}
if (!found) {
s2.getRange(i+4, 1, 1, 6).clearContent(); // Modified
}
}
}