簡體   English   中英

如何使用 getLastRow() & shift 刪除谷歌應用程序腳本中列范圍內的單元格

[英]How to delete cells in a range of a column in google app script using getLastRow() & shift

我一直在通過 stackoverflow 尋找一些關於如何在谷歌表格中編寫腳本的幫助 function 這將允許我刪除一個范圍內的空單元格並在完成后將它們移到(向左)。 我只看到有關刪除空行或空列而不是范圍內的單元格的問題。

這就是我正在嘗試處理的數據:

谷歌表格示例

我需要刪除單元格 A1-A15 並移過其他列

目前正在運行的是以下代碼,但是它會刪除/移動該列,即使列 (A) 中有我正在進行 function 審核的數據(例如單元格 A6 中的數據)。

如果按照示例,在最后一個和倒數第二個數據條目之前的 A 列中有數據,我想確保這個 function 不會關閉 go。 :

 function blankRemoval(){ var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1');//need to call sheet by name as I have multiple tabs var lastRow = sheet.getLastRow() var cellsBlank = sheet.getRange(1,1).isBlank(); if(cellsBlank) { sheet.getRange(1,1,lastRow-3,1).deleteCells(SpreadsheetApp.Dimension.COLUMNS); // shifts cells left }//end of if }//end of function

因此,考慮到這一點,我想我也可以將變量 cellsBlank 設置為 use.getRange(1,1,lastRow-3,1) 以便它只查看范圍到最后一行,並從最后一行停止 3排。 但是,當我使用此代碼時,無論是否有數據,它都不會刪除單元格(function 運行時沒有錯誤,但沒有任何反應)。

我已經嘗試了幾個不同的項目來使用它,但我遇到了困難,因為我不是一個熟練的程序員。 我的猜測是它需要迭代,或者我在范圍內做錯了什么。

還要注意,像我的示例一樣,A 列中始終有 2 個數據條目,數據之間相隔一個單元格。 這是一個有助於歷史回顧的條目。 我想將這兩個單元格保留在原處,但將上面的空數據移動

大概應該是這樣的:

function blankRemoval(){
  var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1');
  var col_A = sheet.getRange(1,1,sheet.getLastRow()-3,1);

  if (col_A.getValues().flat().filter(String).length == 0) { // <-- if the col A is empty
    col_A.deleteCells(SpreadsheetApp.Dimension.COLUMNS);
  }
}

.getValues()獲取帶有值的二維數組

.flat()將二維數組轉換為一維數組

.filter(String)從數組中移除所有空單元格

.length得到數組的長度

這樣,如果范圍包含空單元格,則數組將沒有元素 (array.length = 0)

前:

在此處輸入圖像描述

后:

在此處輸入圖像描述

更新

事實證明,“A”列中的某些單元格可能包含空格。 這里修改了 function,從范圍中刪除了空格:

function blankRemoval(){
  var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1');
  var col_A = sheet.getRange(1,1,sheet.getLastRow()-3,1);

  var contents = col_A.getValues().flat().join('').replace(/\s+/g,'');

  if (contents == '') col_A.deleteCells(SpreadsheetApp.Dimension.COLUMNS);
}

這似乎是最好的 function 用於解決我向@Yuri 提出的問題。 clearContent 有助於刪除任何會阻止對 go 執行 deleteCells 操作的條目

 function blankRemoval(){ var sheet = SpreadsheetApp.getActive().getSheetByName('sheet1'); var col_A = sheet.getRange(1,1,sheet.getLastRow()-3,1); if (col_A.getValues().flat().filter(String).length == 0) { col_A.clearContent();} //<---checks if cell range is empty, and if so performs a clear content (this seemed to fix issues with any ghost entries) if (col_A.getValues().flat().filter(String).length == 0) { // <-- if the col A is empty col_A.deleteCells(SpreadsheetApp.Dimension.COLUMNS); } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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