[英]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.