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

voilà la réponse
Capture5

For your scripts, try this:

	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);
	      }
	    }

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


	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));

	}

le mot "row" est grisé dans le script , est ce que c'est normal ?

Capture5

It is the same in my test project, which works OK.

ok
j'ai essayé et ça ne fonctionne pas pour moi, j'ai toujours le même message et du coup les données ne se modifie pas, c'est peut être un problème de bloc ?

Est ce qu'il ne manque pas quelque chose comme [0] ?
Capture5

comme ça
row = sh.getRange((parseInt(rowid) + 1),1,1,data[0].length).setValues(rowData);

If you believe that to be the problem, you can try that way, see if it works for you...

j'ai testé et ça ne fonctionne pas

je suis revenu au premier script plus haut car le dernier script que j'ai corrigé ne fonctionnait pas (ça ne renvoyait plus aucune données modifiées dans la googlesheet), tandis que celui ci renvoie les données modifiées dans la sheet (jusque là ça va), mais comme le bouton sert à modifier et à lire les données, là je n'arrive pas à lire les données et j'ai ce message d'erreur :

voilà le script dont je parle :

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));
}

savez vous si le problème vient plutot des blocs pour lire les données ?

I will suggest this again:

Check your raw responseContent being returned by the script.

This will help identify the issue and to do your own debugging to find the problem.

du coup je vérifie le Textbox qui se trouve dans le bloc Web au niveau de Read et pas à modifier ?

voilà le résultat, il m'annonce que le champs est vide pour lire alors que dans la sheet j'ai bien la modification ?

Capture5

as previously said and discovered by testing by you, this should be

data.length.

But your scripts are incorrect, you have not used the scripts I previously provided. As they are, they will not return anything.

Oui j'ai essayé le dernier script que vous m'avez fourni (voir plus haut ), c'est à dire celui ci :

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);
	      }
	    }

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


	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));

	}

Et non il ne fonctionne pas , car il n'envoie pas les données (dans la sheet) une fois que je les modifie !
tandis que l'autre script il envoie les données modifiées dans la sheet, c'est juste que je ne peux pas les lire dans l'application (j'utilise le même bouton pour modifier et lire)