Question pour modifier des données dans le Script de googlesheet

bonjour, je voudrais savoir si on peut écrire 2 fonctions "Modifier" et "modifier1" dans le script comme mon exemple en sachant que j'ai 2 sheets (sh1 et sh) . Je pense que ce n'est pas correct.

if (e.parameter.func == "Modifier"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh1 = ss.getSheetByName(e.parameter.SH);
  var rows = sh1.getDataRange().getValues();
  var rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }
  sh1.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);

}

if (e.parameter.func == "Modifier1"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh = ss.getSheetByName(e.parameter.SHT);
  var rows = sh.getDataRange().getValues();
  var rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }
  sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);

}
SpreadsheetApp.flush();
var row = sh1.getRange(parseInt(rowid) + 1,1,1,data[0].length).getValues();
var row = sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).getValues();

return ContentService.createTextOutput(JSON.stringify(row));

Try like this (not tested):


if (e.parameter.func == "Modifier"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh1 = ss.getSheetByName(e.parameter.SH);
  var rows = sh1.getDataRange().getValues();
  var row, rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }
SpreadsheetApp.flush();
row = sh1.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);
return ContentService.createTextOutput(JSON.stringify(row));
}

if (e.parameter.func == "Modifier1"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh = ss.getSheetByName(e.parameter.SHT);
  var rows = sh.getDataRange().getValues();
  var row, rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }
SpreadsheetApp.flush();
row = sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);
return ContentService.createTextOutput(JSON.stringify(row));
}


merci ça à l'air de fonctionner

j'ai un petit problème , j'ai ce message d'erreur quand je clique sur le bouton qui me permet de modifier et lire les données de la sheet

You need to show the blocks in your button click event, and where any values come from that are used in the button click event. It seems you have an empty list somewhere.

oui j'ai une liste, voilà mes blocs du bouton :

Capture5

and the error arises when you press bouton13 ?

oui

Show everything in that button click event - the issue arises when trying to select an item from a list

Is this the same error you are repoting in the other topic? Have you changed anything in your script?

je ne comprends pas ! que voulez vous que j'affiche dans cet événement de clique ?
c'est le bloc de Web que vous voulez dire ?

non ce n'est pas la même erreur , et j'ai modifié le script avec l'aide de TIMAI2 pour pouvoir modifier 2 sheets.

and what you are doing in the web.gottext event

voilà le bloc web

OK, this is probably where the problem lies.

As we have said many times before, check your raw responseContent, and make certain that you are handling it correctly to be able to extract the data. You should now, after doing this many times, not need to keep asking...

My guess is that the problem is here:

j'obtiens ça dans la réponse

Capture6

I had a look and tested the modifier1 part of the script, you will need to make some changes:

if (e.parameter.func == "Modifier1"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh = ss.getSheetByName(e.parameter.SHT);
  var rows = sh.getDataRange().getValues();
  var row, rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }
//this makes the data suitable for applying to a row
var rowData = [data];
//sets the new data to the row
row = sh.getRange((parseInt(rowid) + 1),1,1,data.length).setValues(rowData);
//ensures the data is written to the spreadsheet before doing anything else
SpreadsheetApp.flush();
//gets the new row data from the same row
newRow = sh.getRange((parseInt(rowid) + 1),1,1,data.length).getValues();
//returns the new row data as a string
return ContentService.createTextOutput(JSON.stringify(newRow));

You will probably need to change the modifier part of the script as well.

Sorry I did not get the script right first time around, made too many assumptions!

j'ai rectifier la partie "Modifier1", est ce que la partie "Modifier" est correct ou je dois rectifier comme "Modifier1" ?
Est ce que vous voulez que j'envoie le script complet ?
car j'ai 2 feuilles que je voudrais modifier (sh et sh1)

if (e.parameter.func == "Modifier"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh1 = ss.getSheetByName(e.parameter.SH);
  var rows = sh1.getDataRange().getValues();
  var row, rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }
SpreadsheetApp.flush();
row = sh1.getRange(parseInt(rowid) + 1,1,1,data[0].length).setValues(data);
return ContentService.createTextOutput(JSON.stringify(row));
}

if (e.parameter.func == "Modifier1"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh = ss.getSheetByName(e.parameter.SHT);
  var rows = sh.getDataRange().getValues();
  var row, rowid;
  var data = JSON.parse('[' + e.parameter.DATA + ']');
    for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
   }
  }

  var rowData = [data];
  row = sh.getRange((parseInt(rowid) + 1),1,1,data.length).setValues(rowData);
SpreadsheetApp.flush();
newRow = sh.getRange((parseInt(rowid) + 1),1,1,data.length).getValues();
return ContentService.createTextOutput(JSON.stringify(newRow));

}
}

une fois le "Modifier1" rectifié maintenant j'ai un message d'erreur de colonne,
j'obtiens le nom à la place des données.

Check your raw responseContent!