我从这里获得了一个脚本,现在我需要进行一些调整。 问题是当我运行脚本时,第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
}
答案 0 :(得分:0)
我发现,如果我们可以扩大范围,显然对循环的理解就容易多了,而且显然对您的情况没有影响,所以请尝试一下。
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(),但由于我使用的是两个数组,一个数组包含所有数据,而另一个数组仅包含数组,因此我仍然将数据发送到另一张表复选框列。这样就可以解决您的公式问题。