【问题标题】:Incorrect range width error不正确的范围宽度错误
【发布时间】:2017-12-23 19:37:52
【问题描述】:

注意:这是来自Backup Google apps script not running的后续问题

下面的代码运行时遇到了一些问题,我已将它们缩小到只有 1 个。我收到了错误

范围宽度不正确,为 1 但应为 18(第 41 行,文件“更新备份数据”)

这是违规行

archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, data.length, rng.getWidth()+1).setValues(data);

下面的链接是一份带有虚拟信息的工作表副本。 https://docs.google.com/spreadsheets/d/1DR8XpNlRdZa17KqgnfBX3hxWKP5W4vrRJ_lj5uPNMlU/edit?usp=sharing

下面是代码

function dataBackup() 
{
var inputSS = SpreadsheetApp.getActiveSpreadsheet();
var archiveSS = SpreadsheetApp.openById('1uPA_4CRmv2wkqe1uljViJ-1z1NTNDmwS3aE6TDowe88');
var sheetNames = ['AM trip', 'PM trip', 'Pool / Beach', 'Night Dive'];
for (var i=0; i<sheetNames.length; i++) 
{
var inputSheet = inputSS.getSheetByName(sheetNames[i]);
var archiveSheet = archiveSS.getSheetByName(sheetNames[i]);
var date=inputSheet.getRange('A2').getValue();     
var rng=inputSheet.getRange('E7:U37');
var dataA=rng.getValues();
var data=[];
for(var j=0;j<dataA.length;j++)
{
  if(dataA[j][0] && dataA[j][1])
  {
    data.push([dataA[j].splice(0,0,date)]);
  }
}
var dv=archiveSheet.getRange(archiveSheet.getLastRow(), 1).getValue();
date=(typeof(dv)!='undefined')?dv:'No Date Found';
if (data.length>0) 
{
  archiveSheet.insertRowsAfter(archiveSheet.getLastRow(), data.length);
  archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, data.length, rng.getWidth()+1).setValues(data);
} 
else 
{
  archiveSheet.insertRowsAfter(archiveSheet.getLastRow(), 1);
  archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, 1, 2).setValues([[date, 'No Data']]);
}
}
}

该脚本旨在从选择 e7-U37 复制信息并粘贴到存档表中,并将从单元格 A2 获取的日期放入存档表的第一列,如果没有信息,则输入“无数据”。 这是存档测试表。 https://docs.google.com/spreadsheets/d/1uPA_4CRmv2wkqe1uljViJ-1z1NTNDmwS3aE6TDowe88/edit?usp=sharing

【问题讨论】:

  • 我无法重现该错误。结帐Troubleshooting | Google Apps Script 以了解故障排除技术/工具。我建议您使用 Logger.log() 来识别错误发生的时间(i 的值、工作表名称等)

标签: google-apps-script google-sheets


【解决方案1】:

从您的脚本中,我认为是因为data 的每个元素的长度(二维数组)与rng.getWidth()+1 不同,所以会发生错误。那么下面的修改呢?

发件人:

archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, data.length, rng.getWidth()+1).setValues(data);

收件人:

archiveSheet.getRange(archiveSheet.getLastRow() + 1, 1, data.length, data[0].length).setValues(data);

注意:

顺便问一下,下面的部分你会做什么?

var data = [];
for(var j=0;j<dataA.length;j++) {
  if(dataA[j][0] && dataA[j][1]) {
    data.push([dataA[j].splice(0,0,date)]);
  }
}

您在其他部分使用data,但在这里,data 似乎变成了[[[]], [[]], [[]], ...。如果这是您想要的结果,我认为这没问题。我也认为这部分可能与错误有关。

如果我误解了你的问题,我很抱歉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多