javascript - 无法在谷歌脚本中运行 for 循环
问题描述
我正在尝试运行 for 循环但没有成功。我想要做的是,我在整个列中有一个 1 的工作表,我需要找到出现 1 的第一行,然后从中删除 25 个单元格。
var values = sheet.getRange(2, 3, sheet.getLastRow(),sheet.getLastColumn()).getValues();
for(var i = 0;i<values.length; i++){
if(values[i][0] == 1 ){
Logger.log(i);
break;
} }
for(var j = i;j<i+24; j++){
sheet.getRange(j,3).setValue("");}
但是,什么也没有发生。我不知道我哪里错了。
解决方案
解释:
您的目标是找到列中的第一个元素,1
然后清除25
同一列中的单元格内容。
你不需要一个for
循环来实现你的目标。您可以使用findIndex。
由于您只对一列感兴趣,因此只获取该列并将其用作一维数组;flat将二维数组转换为一维数组:
sh.getRange(start_row,3,sh.getLastRow()).getValues().flat();
然后使用
findIndex
查找1
此数组中的第一个:const index=values.findIndex(v=>v==1) + start_row;
并添加
2
(start_row
),因为您从第二行开始数。最后,您不需要
for
循环来清除单元格的内容。您可以选择所需的范围并使用clearContent一次性清除内容:sh.getRange(index,3,25).clearContent();
解决方案:
function myFunction() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1'); // use the name of your sheet here
const start_row = 2;
const values = sh.getRange(start_row,3,sh.getLastRow()).getValues().flat();
const index=values.findIndex(v=>v==1) + start_row;
sh.getRange(index,3,25).clearContent();
}
如果这对您很重要,请在 3 行代码中使用相同的解决方案:
function myFunction() {
const sh = SpreadsheetApp.getActive().getSheetByName('Sheet1'); // use the name of your sheet here
const index = sh.getRange(2,3,sh.getLastRow()).getValues().flat().findIndex(v=>v==1) + 2;
sh.getRange(index,3,25).clearContent();
}
推荐阅读
- javascript - 使用javascript将二进制文件(Dicom文件)上传到flask服务器并同时接收JSON响应
- c++ - C++ constexpr 动态指针
- docker - 安装 Docker 时出错:请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化
- javascript - 为什么不能在 nextjs 中导入图像文件?
- swift - 使用协议定义具有不同值的 KeyPath 集合
- swiftui - 为什么 didSet 在 SwiftUI 中的 Binding 属性不能按预期工作
- azure-devops - Blazor WebAssembly Azure DevOps 构建管道发布工件
- ios - 为什么我的变量值在 Swift 中恢复?
- python - Python区分抽象方法和抽象属性
- excel - VBE - 未附加到目标工作簿的新代码