我一直在查看 stackoverflow 以获取有关如何在 google 表格中编写脚本的一些帮助,该函数允许我删除范围内的空单元格并在完成后将它们移到(向左)。我只看到有关删除空行或列而不是范围中的单元格的问题。
这就是我正在尝试处理的数据:
我需要删除单元格 A1-A15 并转移到其他列。
当前正在运行的是以下代码,但是即使列 (A) 中有我正在查看功能的数据(例如单元格 A6 中的数据),它也会删除/移动该列。
如果根据示例在最后一个和第二个到最后一个数据条目之前的 A 列中有数据,我想确保此功能不会关闭。:
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 也使用 .getRange(1,1,lastRow-3,1) 以便它只查看范围到最后一行,并从最后一行停止 3排。但是,当我使用此代码时,无论是否有数据,它都不会删除单元格(该函数运行时没有错误,但什么也没发生)。
我已经尝试了一些不同的项目来使用这个,但我正在撞墙,因为我不是一个熟练的程序员。我的猜测是它需要迭代,或者我对范围做错了。
还要注意的是,在 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 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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句