簡體   English   中英

是否可以通過 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)但這並沒有真正起作用......你能幫我嗎?

  • 當在“輸入數據”表的“C3:C”值中找不到“Assignment”表中“C4:C”的值時,要清除“A”列行的內容" 到 "F" 為“作業”表。
  • 您想使用 Google Apps 腳本來實現這一點。

如果我的理解是正確的,這個答案怎么樣? 請將此視為幾種可能的答案之一。

模式一:

在此模式中,您的腳本已被修改。 請按如下方式修改您的腳本。

修改腳本

從:
 s2.deleteRow(i+4);
到:
 s2.getRange(i+4, 1, 1, 6).clearContent();
  • 在這種情況下,“A”列到“F”行的內容被清除。

模式2:

在此模式中,首先檢索清除范圍。 范圍列表由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”的內容也被清除。 但關於這一點,我不確定我是否能正確理解你的目標。 我為此道歉。

參考:

如果我誤解了您的問題並且這不是您想要的結果,我深表歉意。

添加:

  • 您想使用模式 1 的修改腳本。
  • 您想使用Michael, BallackMichael, BALLACK作為相同的值。

看了你的回復,我大概明白了。 對於上述情況,下面的修改如何? 在這種情況下,使用toUpperCase()比較Input DataAssignment中的兩個值。

修改后的腳本:

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM