Arrays 错误:无法将数据数组转换为(类)

Arrays 错误:无法将数据数组转换为(类),arrays,google-apps-script,google-sheets,Arrays,Google Apps Script,Google Sheets,我对JS和GAS还是比较陌生,恐怕我还不太了解阵列。非常感谢你的帮助 在此脚本之前,我有另一个脚本,它将列表中的信息拉入电子表格,电子表格的格式类似于发票。然后,用户对发票进行更改,并将更改再次保存到提取数据的同一行。这只是以用户友好的格式更新发票更改的一种方法 当我运行下面的脚本时,我得到一个错误,说它“无法将“…数组中的数据列表…”转换为(类)“…文件名 恐怕我对数组类了解不够,无法解决这个问题。我寻找了同一个问题的其他问题和答案,但如果我找到了一个,我就不能很好地理解它,无法将其应用到我的

我对JS和GAS还是比较陌生,恐怕我还不太了解阵列。非常感谢你的帮助

在此脚本之前,我有另一个脚本,它将列表中的信息拉入电子表格,电子表格的格式类似于发票。然后,用户对发票进行更改,并将更改再次保存到提取数据的同一行。这只是以用户友好的格式更新发票更改的一种方法

当我运行下面的脚本时,我得到一个错误,说它“无法将“…数组中的数据列表…”转换为(类)“…文件名

恐怕我对数组类了解不够,无法解决这个问题。我寻找了同一个问题的其他问题和答案,但如果我找到了一个,我就不能很好地理解它,无法将其应用到我的情况中

错误发生在第133行(哦,太接近于运行整个脚本了)

函数overwriteInvoice(){
var ui=SpreadsheetApp.getUi();
var ss=SpreadsheetApp.getActive();
var sheet=ss.getSheetByName(“发票”);
//开始将客户名称更改为客户代码
var customerName=sheet.getRange('I2').getValue();
var ccsheet=ss.getSheetByName(“客户代码”);
var lastRow=ccsheet.getLastRow();
//检查它找到了多少行
Logger.log(“lastRow:+lastRow”);
var lookUp=ccsheet.getRange(2,1,lastRow,3).getValues();
对于(nn=0;nn将
getValue()
方法添加到具有以下内容的所有行:

arrayOfData[x] = sheet.getRange('XX');//What to get
现在,一个范围对象被放入数组中,而不是一个值

应该是:

arrayOfData[x] = sheet.getRange('XX').getValue();//Note
创建一个外部数组,并将
arrayOfData
放入其中:

var outerArray = [];
outerArray.push(arrayOfData);

//getRange(Start row, start column, number of rows, number of columns)
invoiceRecord.getRange(copyToRow, 1, outerArray.length, outerArray[0].length)
  .setValues(outerArray);

setValues()
方法必须有一个二维数组。如果这只是一行数据,那么只有一个内部数组。

啊,这就是我不理解的。这只是一行数据,所以我认为我不需要二维数组。非常感谢。这解决了我的问题。我说得太快了。我做了你建议的更改我仍然会得到错误,“无法将[then it list the items in the array]转换为{class}”到同一行。还有什么可能导致该错误的吗?添加
getValue()
method添加到填充数组的所有行中。现在,每个数组元素中都放入了一个对象,而不是一个值。请参阅更新的答案。我也做了更改。同样的错误。还有其他建议吗?感谢您坚持使用此方法。您帮了大忙。您需要将一些值打印到日志中,并准确地查找发生了什么。放置一个
Logger.log('arrayOfData.length:'+arrayOfData.length);
语句在设置值的行之前,运行代码并查看日志。出于测试目的,您不需要设置值,因此可以在设置值的行之前输入一个
返回;
语句停止代码,或者输入一个不存在的函数名:
end()
。这将在该行停止代码,并显示错误消息,但您仍然可以查看日志。还可以记录
arrayOfData[0]。长度
。请告诉我您发现了什么。这与错误无关,但您应该更改一些小事情。
var lookUp=ccsheet.getRange(2,1,lastRow,3)。getValues()
从最后一行减去1:
lastRow-1
。否则,最后一个内部数组将为空值。您从第2行开始,因此要获取的行数与电子表格中的行数不同。在循环外部,但在
for
循环之前声明
nn
:var nn=0;for(nn=0;nn