javascript - 谷歌脚本删除行
问题描述
嘿,我正在尝试编写一个 google 脚本,该脚本将根据 True / False 语句删除行。我正在使用复选标记,并让它删除该行。还有一种方法可以连续运行还是我每次都必须手动运行?
我似乎无法运行代码以删除带有复选标记的行
function deleteRow() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var editSheet = ss.getSheetByName("EDIT");
var lastRowEdit = editSheet.getLastRow();
for(var i = 4; i <= lastRowEdit; i++)
{
if(editSheet.getRange(i,4).getValue() == 'TRUE')
{
editSheet.deleteRow(i);
}
}
}
解决方案
解释/问题:
如果您的工作表列包含
TRUE/FALSE
值,这些值将作为 Google Apps 脚本中的 javascript 布尔值返回。因此,您需要进行的比较是getRange(i,4).getValue() == true
而不是getRange(i,4).getValue() == 'TRUE'
.在循环中调用
getRange
和调用是非常低效的。如果您有很多数据,这可以很快达到配额。getValue
for
正确的解决方案是获取 column 中的数据
D
。我看到您想从第 4 个单元格开始,因此editSheet.getRange('D4:D'+ editSheet.getLastRow())
. 但这将是一个二维数组。您对特定列感兴趣。因此,拥有一维数组更为自然。这就是为什么你可以平十它。现在您已经存储了数据,您想要删除行。但是每次删除一行时,工作表的结构都会发生变化,因此它不会映射您的原始数据。这就是您需要向后迭代的原因。我在这里使用了一个
forEach
循环来使我的代码更清晰,因此我可以反转我的数据集,以便我从末尾迭代每个元素。由于
coldD
包含 javascript 布尔值。我可以直接使用if(r)
.
解决方案:
function deleteRow(){
const ss = SpreadsheetApp.getActiveSpreadsheet()
const editSheet = ss.getSheetByName("EDIT");
const colD = editSheet.getRange('D4:D'+ editSheet.getLastRow()).getValues().flat();
colD.reverse().forEach((r,i)=>{
if(r){
editSheet.deleteRow(colD.length-i+3);
}});
}
推荐阅读
- python - 树莓派:pip 提供不兼容的轮子,安装 pip3
- javascript - html5sortable拖放不适用于ajax加载HTML
- flutter - Flutter 平台特定的导航方法
- javascript - 如何使用 new Date() 获取 DD-MM-YY hh:mm a, en-US, +0100 格式
- postgresql - 数据库初始化发生在 docker-compose 中其他服务的启动之后
- python - 实现我制作成视频的 CNN+LSTM 模型时遇到问题
- c# - 有没有办法反序列化为 ExpandoObject 并在之后进行强类型化
- python - 如何隐藏 print() 或在某些情况下不执行
- android - React Native:错误无法安装应用程序。确保您已设置 Android 开发环境
- python - 我的 django 应用程序中的链式字段是空的。我正在使用 django 智能选择