原因:不正确的范围宽度为14,但是当我的数组中的每个行是16个项目时,应该是16



我正在尝试使用第二个Google Sheet的数据更新Google表。

a"主题表"包含每个录制学科的学生的列表,"老师表"包含特定教师课中该学科的学生列表。

受试者的负责人会将列添加到主题表中,以记录测试分数的值。

添加了这些标题后,我的脚本需要以相同的标题更新教师表。

此外,教师表中的任何学生排,但在主题表中不存在的任何学生都将添加到主题表的末尾。学生在称为" UPN"的列中通过一个值确定。

在进行比较之前,我确保两个床单都具有相同数量的列:

//ensure every row in teacherArray has (at least) the same number of cols as subjectArray
  if (teacherArray[0].length < subjectArray[0].length)
  {
   for (row = 0 ; row < teacherArray.length; row ++)
   {
     for (col = teacherArray[0].length; col < subjectArray[0].length; col ++)
       {
         teacherArray[row].push("");
         dataChanged = true;
       }
   }
  } 

i然后进行各种比较和更新...

如果教师中有任何行中不存在主题中的任何行,我将它们推到主题的尽头。

if (!foundUPN)
{
  dataChanged = true;
  subjectArray.push(teacherArray[tar]);

}

最后,我尝试将数据写回我的工作表:

          if (newSubjectData)
          {
            sheet.getActiveRange();
            sheet.clear();
            for (var row = 0; row < newSubjectData.length; row ++)
            {
              Logger.log("row: " + row + " width: " + newSubjectData[0].length);
            }
            //Logger.log("About to try to write updated newsubjectdata: rows: " + newSubjectData.length + " cols: " +newSubjectData[0].length + "sheet rows: " + sheet.getMaxRows() + " cols: " + sheet.getMaxColumns());
            sheet.getRange(1,1,newSubjectData.length, newSubjectData[0].length).setFormulas(newSubjectData).setNumberFormat('@STRING@');
          }

我已经清除了表格的内容,然后将范围设置为数组的大小。我已经确认,通过迭代每行并记录宽度,数组是完美的矩形(每行都在此处包含16个项目时在这些特定的电子表格上运行时(,但是我的电子表格不会更新。它继续报告"例外:不正确的范围宽度,为14,但应为16"

14是在使用其他标题之前原始的教师表/数组的宽度,但是此数据不是所使用的,而是更新的版本。真的很困惑和困惑,我做错了什么?

发现了我的错误。首先,我尝试显示每行中数组宽度的尝试并未显示实际值。

    for (var row = 0; row < newSubjectData.length; row ++)
            {
              Logger.log("row: " + row + " width: " + newSubjectData[0].length);
            }

newsubjectdata [0] .length应该是newsubjectdata [row] .length

            for (var row = 0; row < newSubjectData.length; row ++)
            {
              Logger.log("row: " + row + " width: " + newSubjectData[row].length);
            }

修复,这表明我实际上,每行都不是相同的宽度。我最初的尝试确保两个阵列的宽度不起作用,因此我将调整大小操作移至将新行推向主要主题阵列之前。

if (!foundUPN)
{
  dataChanged = true;
  //still not getting the correct col widths
  if (teacherArray[tar].length < subjectArray[0].length)
  {
    for (cols = teacherArray[tar].length; cols < subjectArray[0].length; cols ++)
    {
      teacherArray[tar].push("");
    }
  }
  subjectArray.push(teacherArray[tar]);
  Logger.log("UPN not found pushing row width: " + teacherArray[tar].length);
}

最新更新