google-apps-script - 移动带有取消选中复选框的行需要从特定行开始
问题描述
我从这里得到了一个脚本,现在我需要一些调整。问题是当我运行脚本时,第 11 行上方的所有行都从动态变为静态,公式就消失了。我无法弄清楚为什么脚本没有读取并移到第 11 行下方。
function moveRows() {
var sss=SpreadsheetApp.getActive();
var tss=SpreadsheetApp.openById("Target Spreadsheet Id");
var ssh=sss.getSheetByName('Source Sheet Id');
var srg=ssh.getDataRange();
var svA=srg.getValues();
var tsh=tss.getSheetByName('Target Sheet Id');
var oA=[];//output array for rows that meet criteria
for(var i=svA.length-1;i>12; i--) {
if (svA[i][21]==true) { //column 22
oA.push(svA[i].slice()); //this copies the row array
svA[i][21]=false; //uncheck checkbox
}
}
tsh.getRange(tsh.getLastRow()+1,1,oA.length,oA[0].length).setValues(oA);//load target sheet with rows with check boxes checked
srg.setValues(svA);//save values in source sheet
}
解决方案
如果我们可以通过范围递增方式,我发现更容易理解循环,显然它对您的情况没有影响,所以让我们尝试一下。
function moveRows() {
var sss=SpreadsheetApp.getActive();
var tss=SpreadsheetApp.openById("SpreadsheetId");
var ssh=sss.getSheetByName('Sheet1');
var srg=ssh.getRange(2,22,ssh.getLastRow()-1,1);//just column 22
var srg1=ssh.getRange(2,1,ssh.getLastRow()-1,ssh.getLastColumn());//all columns for sending data to other spreadsheet. This wont send formulas
var svA1=srg1.getValues();
var svA=srg.getValues();
var tsh=tss.getSheetByName('Sheet1');
var oA=[];//output array for rows that meet criteria
for(var i=0;i<svA.length; i++) {
if (svA[i][0]==true) { //column 22
oA.push(svA1[i].slice());
svA[i][0]=false;//uncheck checkbox
}
}
tsh.getRange(tsh.getLastRow()+1,1,oA.length,oA[0].length).setValues(oA);//load target sheet with rows with check boxes checked
srg.setValues(svA);//save values in source sheet
}
那么现在你想要循环的确切范围是多少?行是什么?什么是列?哪一列有复选框?
而且我现在看到,也许另一个问题是您有希望保留的公式,因此当我们重置复选框时,我们应该只重置那一列。
在这个版本中,我只在我有复选框的列中执行 setValues() 并且我仍然将数据获取到另一张表,因为我使用了两个数组,一个包含所有数据,一个只有复选框列. 因此,这应该可以解决您的公式问题。
推荐阅读
- nginx - Google Compute Engine:如何从外部发出请求?
- javascript - 当每个单独的段都是一个对象时,如何在 d3 中创建堆积条形图?
- sql - 获取两个 DATES 之间的 MAX、MIN、AVG
- python-3.x - python打印unicode特殊字符
- php - 使用 Laravel eloquent 将文本框中的数组插入数据库
- php - 如何将 HTML 字符串转换为 DOMNode 以在 PHP 中使用 DOMNode::insertBefore?
- php - PHP 多个 'stripos' 语句
- vba - 通过电子邮件发送工作表内容
- android - ANR 开发者控制台
- javascript - javascript - 调用函数不传递参数