0
votes

Script d'app n'étant pas en fonction de la position de la colonne

Je veux pouvoir insérer des colonnes dans mes données ou réorganiser les positions de colonne sans affecter les fonctions Appscript.

au lieu de faire référence aux positions de colonne par numéro, j'ai pensé à y référant à leur valeur par des valeurs d'en-tête (je ne changerai pas les noms). p>

J'ai fait une petite fonction qui facilitera la tâche d'écrire le code. p>

La sortie de la fonction sera stockée dans la feuille, puis je vais copier la pâte C'est à ma fonction de script d'application. P>

est mon approche d'accord ou y a-t-il une meilleure façon de le faire? P>

function get_headers(){
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sheets=ss.getSheets();
  var fin=[];

    var tsheet=ss.getSheetByName("Product");
    var shtname=tsheet.getName();
    var [hd_Product, ...data_Product] = tsheet.getDataRange().getDisplayValues();
    for (j=0;j<hd_Product.length;j++) {  fin.push("const "+shtname+"_"+hd_Product[j]+"=hd_product.indexOf('"+hd_Product[j]+ "');") };
Browser.msgBox(fin);
  //tsheet.getRange(tsheet.getLastRow(), 1, fin.length, fin[0].length).setValues(fin);



The below code - for running it for all the shets is not woeking.

  for (i=0;i<sheets.length;i++){
    var shtname=sheets[i].getName();
    var tsheet=ss.getSheetByName(shtname);
    var [header, ...data] = tsheet.getDataRange().getDisplayValues();
    for (j=0;j<header.length;j++) {
      fin.push("const "+shtname+"_"+header[j]+"=header.indexOf('"+header[j]+ "');") ;
    }//for j

Browser.msgBox(fin);


}//for i





//Browser.msgBox(fin);

}

//
//


function process(){

const Product_Code=hd_product.indexOf('Code');
const Product_Item=hd_product.indexOf('Item');
const Product_UOM=hd_product.indexOf('UOM');
const Product_CAT=hd_product.indexOf('CAT');
const Product_Price=hd_product.indexOf('Price');
const Product_Min_Stock=hd_product.indexOf('Min_Stock');
const Product_Lot=hd_product.indexOf('Lot');
const Product_Now_Stock=hd_product.indexOf('Now_Stock');
const Product_Upd_Date=hd_product.indexOf('Upd_Date');
const Product_Vendor1=hd_product.indexOf('Vendor1');
const Product_Vendor2=hd_product.indexOf('Vendor2');
const Product_Vendor3=hd_product.indexOf('Vendor3');




}





0 commentaires

3 Réponses :


0
votes

Comment obtenir un numéro de colonne par la valeur de l'en-tête

Un moyen facile de renvoyer le numéro de colonne serait le suivant xxx

Vous pouvez utiliser la variable dynamique colonne stockant le numéro de colonne pour effectuer toutes sortes de demandes, par exemple

var plage = tsheet.getrange (5, colonne);


4 commentaires

Je ne suis pas capable de comprendre comment la fonction sera appelée ou utilisée. Je veux faire référence à la position de la colonne (numéro) par une variable (nom). Par exemple, au lieu des ventes [I] [8], je veux utiliser les vils [I] [itemcode]. De cette façon, même si j'ajoute ou supprimez une colonne, le code ne changera pas


Vous donnez retourcolumn (en-tête) le nom de la colonne et renvoie le numéro de colonne.


J'ai six onglets dans la feuille, tous avec des données connectées - Docs .google.com / Spreadsheets / d / ... .... L'articleCode apparaît dans de nombreux onglets. Je dois vous référer à l'articleCode différemment pour chaque onglet. C'est pourquoi j'ai conçu un nom Product_ItemCode ou Minstock_ItemCode pour distinguer la colonne uniquement (pour chaque onglet). Toute la solution suggérée n'est pas très utile pour la situation. Je ne veux pas exécuter une fonction chaque fois que je veux faire référence à une colonne.


Vous utilisez simplement la fonction ci-dessus spécifiant var rechercheheader = "itemCode"; et var cordode = retourcolumn (RechercheHheader); et ensuite vous pouvez faire l'appel productvals [i] [itemcode]. Si vous avez plusieurs onglets, que vous devez modifier la fonction ci-dessus à Fonction Retourcolumn (en-tête, feuille de feuilles ) {var ss = feuilleettapp.getactiveChaisehshiche (); Var Tsheet = Ss.getsheetbyName (feuilleName); ... que cela, vous devez transmettre la feuille à votre appel. Et appelez avec var itemCodeProduct = retourcolumn (RechercheHheader, "Produit"); var itemCodedesheet2 = retourcolumn (RechercheHheader, "feuille2"); etc.



1
votes

Un meilleur moyen consiste à associer Developmermetadata avec cette colonne: xxx

une fois la configuration, la colonne peut être déplacée n'importe où et les métadonnées associées vont également bouger. Vous pouvez ensuite récupérer la position de la colonne actuelle à l'aide de DevelopmermetaDaTinder < / Code> , même si vous modifiez le nom de l'en-têtes dans la feuille: xxx

références:

Guide de métadonnées du développeur


0 commentaires

1
votes
function myFunction() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getActiveSheet();
  const rg=sh.getDataRange();
  const vA=rg.getValues()
  //Just learn how to use the next 3 or 4 lines and it's pretty easy you can integrate them into any code
  const hA=vA[0];//this is the header row with a [0] index at the end to flatten it out to a single dimension array.
  const col={};//returns column from header name
  const idx={};//returns index from header name
  hA.forEach(function(e,i){col[e]=i+1;idx[e]=i;});//this is the loop to fill in the objects above depending upon whether you want indexes or columns
  //Example of how to use them
  vA.forEach(function(r,i){}) {
    r[idx[headername]];//referring to an index with column header
    sh.getRange(i+1,col[headername]).setValue();//reffering to a column with header name
  }

0 commentaires