1
votes

Problèmes d'utilisation de la fonction setValues

Je reçois toujours un message d'erreur lorsque j'utilise la fonction setValues ​​() pour exporter un tableau vers des feuilles Google. J'ai essayé de nombreuses méthodes différentes pour créer mon tableau 2D, mais j'obtiens toujours les mêmes erreurs. Parfois, mon code s'exécutera (le tableau sera exporté vers la feuille de calcul) mais j'obtiendrai toujours une erreur.

J'ai initialement utilisé la fonction setValue () dans une boucle for mais le code expirait parce qu'il a duré trop longtemps. J'ai donc essayé de transférer toutes mes données dans un tableau 2D et de les alimenter en une seule fois dans la feuille de calcul.

J'ai essayé de créer le tableau sous forme de tableau 2D vide

var setRows = outputArray.length;
 var setColumns = outputArray[0].length

  revenueSheet.getRange(2,1,setRows,setColumns).setValues(outputArray);

et en utilisant .push pour y remplir les données

J'ai essayé de créer le tableau vide en utilisant la fonction:

outputArrayIntermediate[0] = data1;
outputArrayIntermediate[1] = data2;
outputArrayIntermediate[2] = data3;
outputArrayIntermediate[3] = data4;...

outputArray[rowNumber] = outputArrayIntermediate;

et en ajoutant les données par lignes (à l'intérieur d'une boucle for qui itère par rowNumber)

outputArray[rowNumber] = [data1, data2, data3,...]

Utilisé la même fonction ci-dessus pour créer un tableau vide et créé un tableau intermédiaire, puis mettre cela dans le tableau de sortie

function create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}

Voici où l'erreur continue de se produire

  var outputArray = [[]]

Lorsque j'inclus la variable setColumns, j'obtiens l'erreur : "Le nombre de colonnes dans les données ne correspond pas au nombre de colonnes de la plage. Les données ont 0 mais la plage a 11." Cela remplira toujours les données dans la feuille de calcul.

Lorsque je n'inclut pas la variable setColumns, j'obtiens l'erreur: "Le nombre de colonnes dans les données ne correspond pas au nombre de colonnes de la plage. Les données ont 11 mais la plage en a 1."


3 commentaires

Le problème est donc de savoir comment vous construisez le tableau 2D. À quoi ressemble votre tableau juste avant setValues ​​()? Logger.log (outputArray); Menu 'Affichage'> Journaux


Le tableau de sortie est actuellement de cette forme: [[data1, data2, data3, data4, data5 ...], [data1.1, data2.1, data3.1, data4.1, data5.1 ...], ...


J'ai soumis une réponse basée sur votre réponse!


3 Réponses :


0
votes

Cela vous aidera peut-être:

function createSSData(numrows,numcols) {
  var numrows=numrows || 20;
  var numcols=numcols || 20;
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var values=[];
  for(var i=0;i<numrows;i++) {
    values[i]=[];
    for(var j=0;j<numcols;j++) {
      values[i].push(Utilities.formatString('row: %s,col: %s',i+1, j+1));
    }
  }
  sh.getRange(1,1,values.length,values[0].length).setValues(values);
}


0 commentaires

2
votes

Vous n'avez besoin que de [] pas de [[]], car vous poussez des tableaux dans outputArray, et push s'assure qu'il se développera toujours en cas de besoin.

Essayez ceci:

outputArray = [];
outputArray.push([data1, data2, data3]);
outputArray.push([data4, data5, data6]);     

revenueSheet.getRange(2,1,outputArray.length,outputArray[0].length).setValues(outputArray);


0 commentaires

1
votes

Y a-t-il déjà eu une instance où une ligne a plus de colonnes qu'une autre ligne? Par exemple, si la «ligne» 1 de vos données sous forme de 5 colonnes ( outputArray.length = 5) et la ligne 2 en a 6, alors les données ont besoin d'une plage de 6 colonnes.

Si tel est le cas, voici quelques solutions par ordre de simplicité:

1. S'il n'y a aucune donnée importante à droite de l'endroit où vous insérez vos données, vous pouvez utiliser revenueSheet.getMaxColumns () dans votre .getRange () .setValues ​​() .

2. Parcourez l'ensemble de données pour trouver la ligne avec la longueur la plus longue et définissez-la comme le nombre de colonnes. Pour ce faire, consultez cette réponse pour quelques options.


2 commentaires

Merci. Cela m'a aidé à comprendre. Je ne pouvais pas le voir sur mon enregistreur car mon tableau était trop long, mais la dernière ligne de mon tableau était vide. Quand j'ai initialisé mon tableau vide, je l'avais fait une ligne trop longue.


Je suis content que vous l'aillez compris.