![](/img/trans.png)
[英]Trying make a macro to delete last number of rows and columns in google sheets
[英]Is it possible to delete the content of specific rows by a macro in Google Sheets?
我有兩個電子表格,一個稱為“輸入數據”,另一個稱為“分配”。 如果“分配”的 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 行的 AF 列(如果它符合我上面描述的標准)。 我試過s2.deleteContents(i+4)
但這並沒有真正起作用......你能幫我嗎?
如果我的理解是正確的,這個答案怎么樣? 請將此視為幾種可能的答案之一。
在此模式中,您的腳本已被修改。 請按如下方式修改您的腳本。
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 AF 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 } } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.