Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用条件复制/粘贴脚本_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 使用条件复制/粘贴脚本

Google apps script 使用条件复制/粘贴脚本,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个脚本可以从非连续列复制和粘贴数据,我有一个脚本可以根据多个条件复制和粘贴数据,但是在多次尝试后,我无法创建一个同时执行这两项操作的脚本。任何帮助都将不胜感激。对于以下代码,错误为: 数据中的行数与范围中的行数不匹配 函数更新{ var source=SpreadsheetApp.openById'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';//源工作簿 var sourcesheet=source.getSheetByNameTest.getDat

我有一个脚本可以从非连续列复制和粘贴数据,我有一个脚本可以根据多个条件复制和粘贴数据,但是在多次尝试后,我无法创建一个同时执行这两项操作的脚本。任何帮助都将不胜感激。对于以下代码,错误为:

数据中的行数与范围中的行数不匹配

函数更新{ var source=SpreadsheetApp.openById'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';//源工作簿 var sourcesheet=source.getSheetByNameTest.getDataRange.getValues;//*源工作簿工作表,工作表因位置而异。区分大小写。 var dest=SpreadsheetApp.getActiveSpreadsheet;//目标工作簿 var destsheet=dest.getSheetByNameTeam;//目标工作簿工作表 变量标准1=活动//标准1 var criteria2=Hop//*条件2,更改为中的位置名称 destsheet.getRange6,1,destsheet.getLastRow,destsheet.getLastColumn.clearContent//清除目标工作表上以前的所有内容 SpreadsheetApp.flush;//在添加新数据之前,请等待清除表完成 var sourcerange=[4,2,1,4,5,7,11,12,4,64,4,65,4,68,69,70,4,75];//要导入的数据列 var newvalues=[]; 对于变量i=0,length=sourcesheet.length;i0{ destsheet.getRange6,1,长度+1,宽度+1.setValuesnewvalues; } }
newvaluess数组长度存在问题。它与sourcerange数组长度不匹配

您可以通过将此代码添加到代码中进行检查

Browser.msgBox("sourcerange length: " + sourcerange.length + " | newvalues length: " + newvalues.length);
return;
if(newvalues.length > 0) {   
  destsheet.getRange(6, 1, length +1, width +1).setValues(newvalues);
}
我认为问题在于,你不需要添加else,在数组中添加一个空槽,在不匹配条件时保持相同的长度

试试这个:

function UpdateTeam() {
  var sss=SpreadsheetApp.openById('id');
  var svA=sss.getSheetByName("Test").getDataRange().getValues();
  var dss=SpreadsheetApp.getActive();
  var dsh=dss.getSheetByName("Team");
  var criteria1="Active";
  var criteria2="Hop";
  dsh.getRange(6,1,dsh.getLastRow()-5,dsh.getLastColumn()).clearContent();
  var srg=[4,2,1,4,5,7,11,12,4,64,4,65,4,68,69,70,4,75];
  var newvalues = [];
  for (var i=0;i<svA.length;i++) {
    if (svA[i][1]==criteria1 && svA[i][2]==criteria2){
      var row=[];
      srg.forEach(function(e,j){row.push(svA[i][srg[j]]);})
      newvalues.push(row);
    }
  }
  if(newvalues){dsh.getRange(6,1,newvalues.length,srg.length).setValues(newvalues);}
}

工作得很好,只需更改var i=0,这是forEach方法中的匿名函数。再次感谢您的帮助,非常感谢。