¿Cómo se resuelve el error "Los parámetros (número []) no coinciden con la firma del método para SpreadsheetApp.Range.setValues"?

Resuelto Nico asked hace 4 años • 3 respuestas

Recibo este error:

"Los parámetros (número []) no coinciden con la firma del método para SpreadsheetApp.Range.setValues".

en mi Google Apps Script cuando intento escribir una matriz de valores en una hoja.

A continuación se muestra una versión abreviada (simplificada) del código. El código real recorre unos 10.000 registros.

El error se genera en la última línea, cuando se setValuesllama.

Sé que me estoy perdiendo algo súper simple aquí.

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

Esto es lo que vWriteTableparece al depurar:

datos de depuración

Nico avatar Apr 09 '20 14:04 Nico
Aceptado

setValuesacepta (y getValues()devuelve):

  • 1 argumento de tipo:
  • Object[][]una matriz bidimensional de objetos

NO acepta una matriz unidimensional. Un rango siempre es bidimensional, independientemente de la altura o el ancho del rango, o ambos .

Si A1:A2 es el rango, entonces la matriz de valores correspondiente sería como:

  • [[1],[3]]

De manera similar, A1:B1 sería

  • [[1,2]]

A1:B2 sería

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

Observe cómo las dos dimensiones proporcionan dirección y que siempre es una matriz 2D, incluso si la altura o el ancho del rango es solo 1.

Solución:

Empuje una matriz 1D para hacer que la matriz de salida sea 2D.

Retazo:

vWriteTable.push(/*Added []*/["Yes"]);

Más información:

Para obtener una explicación más detallada de las matrices en las hojas de Google, consulte mi respuesta aquí .

TheMaster avatar Apr 09 '2020 07:04 TheMaster

Simplemente puede hacer esto, poner el valor entre corchetes []:

en tu caso: WriteTable.push([""]) or WriteTable.push(["yes"])

Andrea Guerri avatar Jun 14 '2023 14:06 Andrea Guerri