1
votes

Ajout d'une 4ème colonne à un tableau et création de la nouvelle colonne = les valeurs concaténées des 3 premières colonnes

Bonjour dans les feuilles de scripts de l'application Google J'essaie de comprendre comment ajouter une 4ème colonne à un tableau de 3 colonnes existant et entièrement rempli. La 4ème colonne va être définie sur une chaîne concaténée et manipulée des 3 premières colonnes.

Mon objectif final est de créer une chaîne d'insertion de base de données SQL à partir des 3 premières valeurs. Par exemple, si la ligne du tableau est 1, 2, 3, la colonne pour serait définie pour être insérée dans les valeurs du tableau (1, 2, 3); (pas une connexion de base de données programmatique juste la chaîne SQL réelle pour l'insertion)

Pourriez-vous m'aider avec la syntaxe ou le pseudo-code de la façon dont je travaillerais cela dans le tableau? Votre aide est très appréciée

Quelque chose comme:

const range=SheetHistory.getDataRange();
var array=range.getValues();

/*pseudo code*/
array = array + 4th column //add a 4th column to the array or move data to a new 4 column array
For x = 1 through end of array ++x) // loop through array
 Array [x,4] = [x,1] & [x,3] [x,4] // set column 4 for each row = to a concatenated string derived from columns 1,2,3 for that row
next x // repeat until end of array


0 commentaires

3 Réponses :


1
votes

Essayez ceci:

 function addAColumn() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getActiveSheet();
  const rg=sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()+1);//add a column here
  var vs=rg.getValues().map(function(r){return[r[0],r[1],r[2],String(r[0])+String(r[1])+String(r[2])];});//fill it here
  sh.getRange(sh.getLastRow()+1,1,vs.length,vs[0].length).setValues(vs);
}

Cette fonction ajoutera une colonne à une feuille de calcul à 3 colonnes et la quatrième colonne sera remplie avec la somme des chaînes des 3 premières colonnes.

p>


2 commentaires

Je pensais faire cela, mais le problème était que je traversais plusieurs itérations et qu'il y avait un changement de performance entre les feuilles actives à chaque fois, donc je cherchais à garder la charge de travail dans le tableau pour éviter les performances, mais j'ai essayé ceci et cela fonctionne totalement.


Je ne comprends pas pourquoi vous basculeriez entre les feuilles actives.



1
votes

Vous pouvez simplement parcourir l'ensemble du tableau et ajouter la valeur de la quatrième colonne à chaque index de ligne comme

for (var i = 0; i < array.length ; i++) {
array[i]["4th column"]=String(array[i]["1"])+String(array[i]["2"])+String(array[i]["3"]);
}


3 commentaires

Bien que ce code puisse résoudre le problème du PO, il est préférable d'inclure une explication sur la façon dont votre code résout le problème du PO. De cette façon, les futurs visiteurs peuvent apprendre de votre publication et l'appliquer à leur propre code. SO n'est pas un service de codage, mais une ressource de connaissances. De plus, les réponses complètes et de haute qualité sont plus susceptibles d'être votées. Ces fonctionnalités, ainsi que l'exigence que tous les messages soient autonomes, sont quelques-unes des forces de SO en tant que plate-forme, qui le différencie des forums. Vous pouvez modifier pour ajouter des informations supplémentaires et / ou pour compléter vos explications avec la documentation source.


Merci @ysf terminé


Bien, je me suis rendu compte que vous pouviez simplement ajouter dans une colonne sans manipuler la variable et je fouillais la syntaxe. Cela aide vraiment à voir votre code merci.



1
votes

C'est assez simple, l'astuce est que votre tableau est un tableau 2D composé de lignes (première dimension) et de colonnes (deuxième dimension). Donc, faire un Pour chaque ligne du tableau, concaténer toutes les colonnes et stocker le résultat dans une nouvelle colonne de la ligne le ferait.

Par exemple:

function makeSQLString() {
  const range=SpreadsheetApp.getActiveSheet().getDataRange();
  var array=range.getValues();
  for (var i = 0; i < array.length ; i++) {
    array[i][3]=String(array[i][0])+String(array[i][1])+String(array[i][2]);
  }
  console.log(array);
}


2 commentaires

Merci! Je ne savais pas que vous pouviez simplement l'ajouter, je pensais qu'il était peut-être nécessaire d'ajuster la variable. Merci pour votre explication et la syntaxe m'a vraiment aidé.


Je suis content que cela vous ait aidé. Veuillez accepter et / ou voter pour la réponse si cela fonctionne pour vous.