您如何解决“参数(数字 [])与 SpreadsheetApp.Range.setValues 的方法签名不匹配”错误

Nic*_*ico 12 arrays google-sheets google-apps-script

我收到此错误:

“参数 (number[]) 与 SpreadsheetApp.Range.setValues 的方法签名不匹配。”

当我尝试将一组值写入工作表时,在我的 Google Apps 脚本中。

下面是代码的缩短(简化)版本。实际代码运行了大约 10,000 条记录。

setValues调用时,错误发生在最后一行。

我知道我在这里错过了一些非常简单的东西。

function writeArrayToSheet() {

  var ss = SpreadsheetApp.openById("Spreadsheet_ID");
  var orderSheet = ss.getSheetByName("Sheet_Name");
  var vTable = orderSheet.getRange(1,6,5,11).getValues(); //Raw data 
  var vWriteTable = []; //Data that will be written to sheet
  var updateTime = new Date();
  var i = 0;
  var vSeconds = 0;


  while (i < 5 && vTable[i][0] != "") {

    //Logic section that calculated the number of seconds between

    if (vSeconds == 0) {
      vWriteTable.push("");
    } else {
      if (vTable[i][6] < certain logic) {
        vWriteTable.push("Yes");
      } else {
        vWriteTable.push("");
      }      
    }        
    i = i + 1;
  } // End while

  orderSheet.getRange(1,20,vWriteTable.length,1).setValues(vWriteTable);
} //End Function
Run Code Online (Sandbox Code Playgroud)

这是vWriteTable调试时的样子:

调试数据

The*_*ter 19

setValues接受(并getValues()返回):

  • 1 个参数类型:
  • Object[][]一个2个物体的二维阵列

接受的一个维数组。范围始终是二维的,与范围 height 或 width 无关

如果 A1:A2 是范围,则对应的值数组将类似于:

  • [[1],[3]]

同样,A1:B1 将是

  • [[1,2]]

A1:B2 将是

  • [[1,2],[3,4]]

请注意二维如何提供方向,并且它始终是一个二维数组,即使范围的高度或宽度仅为 1。

解决方案:

推入一维数组使输出数组成为二维数组。

片段:

vWriteTable.push([""]);
Run Code Online (Sandbox Code Playgroud)

相关回答:

范围方法 getValues() 返回和 setValues() 接受什么?

  • @user8118328 这段代码的意思是,每次你进行推送时,它都必须是一个二维数组。因此,如果您正在构建的数组是一维的,您需要添加额外的方括号以使其成为二维的。当应用于原始问题时,这意味着您将以下代码行替换为: vWriteTable.push(""); --&gt; vWriteTable.push([""]); 和 vWriteTable.push("是"); --&gt; vWriteTable.push(["是"]); (4认同)