Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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
Javascript 无缘无故获得不正确的范围高度?_Javascript_Google Apps Script_Google Sheets_Google Spreadsheet Api - Fatal编程技术网

Javascript 无缘无故获得不正确的范围高度?

Javascript 无缘无故获得不正确的范围高度?,javascript,google-apps-script,google-sheets,google-spreadsheet-api,Javascript,Google Apps Script,Google Sheets,Google Spreadsheet Api,我正在写一个脚本,将一个范围从一张纸复制粘贴到另一张纸。粘贴范围大小应通过使用两个函数来减小:一个用于删除具有特定值的行,另一个是聚合函数 在我引入了聚合函数之后,我开始出现这个错误。该函数基本上是使用减少JS函数来减少数组大小 我已经复制了我的问题,代码可以在脚本编辑器中访问 运行脚本时,出现以下错误: 不正确的范围高度为28,但应为7(第36行,文件“测试”) 我不知道我为什么会犯这个错误。我的聚合函数返回一个格式正确、长度正确的数组 function append_range(){

我正在写一个脚本,将一个范围从一张纸复制粘贴到另一张纸。粘贴范围大小应通过使用两个函数来减小:一个用于删除具有特定值的行,另一个是聚合函数

在我引入了聚合函数之后,我开始出现这个错误。该函数基本上是使用减少JS函数来减少数组大小

我已经复制了我的问题,代码可以在脚本编辑器中访问

运行脚本时,出现以下错误:

不正确的范围高度为28,但应为7(第36行,文件“测试”)

我不知道我为什么会犯这个错误。我的聚合函数返回一个格式正确、长度正确的数组

 function append_range(){    


       var origin_sheet = SpreadsheetApp.openById('1-2ZheMz1p01qwtwY3ghbNjJedYfGXeylnLEjDMCLpMw');//open the file
       origin_sheet = origin_sheet.getSheetByName('test');
       var rangeStart = 2;

       var range = origin_sheet.getRange('A'+ (rangeStart.toString())+':T'+ (origin_sheet.getLastRow()).toString());


      var dataFromRange = range.getValues();
      var dataFromRangeLength = dataFromRange.length;


      var destination_sheet = SpreadsheetApp.openById('1-2ZheMz1p01qwtwY3ghbNjJedYfGXeylnLEjDMCLpMw');
       destination_sheet = destination_sheet.getSheetByName('append');

      var rowLast = destination_sheet.getLastRow()+1;
      Logger.log("row last" + rowLast);
      var formattedRange = deleteRows(dataFromRange);

       var groups = aggregate(formattedRange);

       var aggregates = [];

       for(var group in groups)
       {
        aggregates.push(groups[group]);
       }    

           Logger.log(aggregates);
      var formattedRangeLength = aggregates.length;
         Logger.log("formattedRangeLength" + formattedRangeLength);


      destination_sheet.getRange(rowLast,1,formattedRangeLength, 20).setValues(deleteRows(dataFromRange));





function isDate(sDate) {
  if (isValidDate(sDate)) {
    sDate = Utilities.formatDate(new Date(sDate), "PST", "yyyy-MM-dd");
  }
  return sDate;
}

function isValidDate(d) {
  if ( Object.prototype.toString.call(d) !== "[object Date]" )
    return false;
  return !isNaN(d.getTime());
}    
//
function deleteRows(dataRange){//just pass the range in an array and this method will return another array with filtered range

  var formatted = dataRange.filter(function(e) {
    return e[8]||e[9]||e[10]||e[11]||e[12]||e[13]||e[14]||e[15]||e[16]||e[17]||e[18]||e[19];
  });
 return formatted;

}

   function aggregate(data)
    {

       var groups = data.reduce(
            function(accumulator, previous){
            {
                var key = previous[1] + previous[3] + previous[5] + previous[6];
                var group = accumulator[key];
                if(group == null || typeof group == 'undefined')
                {
                    accumulator[key] = previous;
                }
                else {
                    var startIndex = 8;
                    for(var i = startIndex; i < previous.length;i++)
                    {
                        group[i] += previous[i];
                    }
                }

               return accumulator;
            }},
            {});
        return groups;
    }



}
函数append_range(){
var origin_sheet=SpreadsheetApp.openById('1-2ZheMz1p01qwtwY3ghbNjJedYfGXeylnLEjDMCLpMw');//打开文件
origin_sheet=origin_sheet.getSheetByName(“测试”);
var rangeStart=2;
var range=origin\u sheet.getRange('A'+(rangeStart.toString())+':T'+(origin\u sheet.getLastRow()).toString());
var dataFromRange=range.getValues();
var dataFromRangeLength=dataFromRange.length;
var destination_sheet=电子表格app.openById('1-2ZHEMZ1P01QWTWY3GHBNJJEDYFGXEELJDMCLPMW');
destination_sheet=destination_sheet.getSheetByName('append');
var rowLast=destination_sheet.getLastRow()+1;
Logger.log(“最后一行”+最后一行);
var formattedRange=deleteRows(dataFromRange);
var组=聚合(formattedRange);
var聚合=[];
for(组中的var组)
{
聚合。推(组[组]);
}    
Logger.log(聚合);
var formattedRangeLength=aggregates.length;
Logger.log(“formattedRangeLength”+formattedRangeLength);
destination_sheet.getRange(最后一行,1,formattedRangeLength,20).setValue(deleteRows(dataFromRange));
函数isDate(sDate){
if(isValidDate(sDate)){
sDate=实用程序.formatDate(新日期(sDate),“PST”,“yyyy-MM-dd”);
}
返回sDate;
}
函数isValidDate(d){
if(Object.prototype.toString.call(d)!=“[对象日期]”)
返回false;
return!isNaN(d.getTime());
}    
//
函数deleteRows(dataRange){//只需在数组中传递范围,此方法将返回另一个具有筛选范围的数组
var formatted=dataRange.filter(函数(e){
返回e[8]| e[9]| e[10]| e[11]| e[12]| e[13]| e[14]| e[15]| e[16]| e[17]| e[18]| e[19];
});
返回格式;
}
函数聚合(数据)
{
var组=data.reduce(
功能(累加器,上一个){
{
var键=上一个[1]+上一个[3]+上一个[5]+上一个[6];
var组=累加器[键];
if(group==null | | typeof group=='undefined')
{
累加器[键]=上一个;
}
否则{
var startIndex=8;
对于(var i=startIndex;i
.setValues()
没有设置它试图设置的
删除行(dataFromRange)


我认为这可能有效:

var output=deleteRows(dataFromRange));
destination_sheet.getRange(rowLast,1,output.length, output[0].length).setValues(deleteRows(output));
这假定为非锯齿阵列


当值数组的行数超过
setValues()
范围时,会出现此错误。如果您想更改
.reduce()
范围,则setValues()
代码可能会看到出错的地方。@random parts该代码位于此工作表的脚本编辑器中!报告错误的代码行是:destination_sheet.getRange(rowLast,1,formattedRangeLength,20).setValues(deleteRows(dataFromRange));“应为7”表示已将formattedRangeLength的范围高度设置为7;然而,您希望使用从函数调用deleteRows(dataFromRange)返回的数组设置值,该数组的长度不是7而是28。您声明聚合函数按预期返回;但这里有一个不匹配,这导致了您的error@RobertRoss看到它发布比点击随机链接更容易spreadsheets@random-部分,所有权利,我编辑了我的问题
var output=deleteRows(dataFromRange));
destination_sheet.getRange(rowLast,1,output.length, output[0].length).setValues(deleteRows(output));