J'ai lu d'autres questions similaires, mais je ne pouvais pas comprendre comment le faire sur mon code.
J'ai une feuille de calcul qui sera remplie d'une application, j'utilise Appendrow pour ajouter des lignes mais j'ai besoin maintenant de Pour mettre à jour la ligne entière avec une nouvelle gamme de données, si la variable PID (Código) de la rangée que je reçois existe sur la feuille de calcul, je dois le mettre à jour, pas ajouter une nouvelle ligne. P>
3 Réponses :
PID code> est inclus dans les valeurs de la colonne "A", vous souhaitez remplacer la ligne avec Rowdata code>. Li>.
- Lorsque
PID code> n'est pas inclus dans les valeurs de la colonne "A", vous souhaitez appendez une nouvelle ligne avec Rowdata code>. Li>.
Si ma compréhension est correcte, que diriez-vous de cette réponse? S'il vous plaît pensez à cela comme une des réponses possibles possibles. P>
Script modifié: h3>
Lorsque votre script est modifié, cela devient comme suit. P>
function doGet(request) {
var sheet = SpreadsheetApp.openById("DOCUMENT_ID");
var range = sheet.getActiveSheet().getDataRange(); // Added
var data = range.getValues(); // Modified
var updateIndex = 0; // Modified
try{
var pid = request.parameter.pid;
var nome = request.parameter.nome;
var desc = request.parameter.desc;
var marca = request.parameter.marca;
var tipo = request.parameter.tipo;
var preco = request.parameter.preco;
var ativado = request.parameter.ativado;
var rowData = [pid, nome, desc, marca, tipo, preco, ativado];
for(var i = 1; i < data.length; i++){
if(data[i][0] == pid){
data[i] = rowData; // Added
updateIndex = i;
}
}
if (updateIndex != 0) { // Added
range.setValues(data);
} else {
sheet.appendRow(rowData);
}
} catch(e){
console.log(e);
}
// In your script, "result" is not declared. Please be careful this.
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType);
}
Non, lorsque l'utilisateur modifie les données à partir de certaines données d'un produit sur mon application, l'application enverra les données (Rowdata) sur Google Spreedsheet, puis le script recevra les données, vérifiez si une ligne a le "PID" (produit ID), et au lieu d'ajouter une nouvelle ligne avec le Rowdata, je dois mettre à jour la même ligne si PID existe sur la feuille de calcul. Si vous pouviez modifier votre réponse, ce sera génial :)
À propos du résultat, j'ai oublié d'ajouter, mais sur le code d'origine, il est là.
@djalmafreestyler Merci de répondre. Je m'excuse profondément pour ma mauvaise compétence en anglais. Au début, je voudrais confirmer si ma compréhension de votre objectif est correcte. De votre réponse, vous souhaitez écraser la ligne existante lorsque pid code> est inclus dans la colonne "A" de la feuille de calcul. D'autre part, lorsque
pid code> n'est pas inclus dans la colonne "A", vous ne souhaitez pas ajouter
rowdata code>. Est-ce que ma compréhension est correcte?
Merci beaucoup pour répondre, je m'excuse pour mon anglais. Ok je vais essayer d'expliquer chaque étape. Je pense que je devrai expliquer où les données proviendront de vous faire comprendre mon code compliqué hehe, d'ok, d'abord, l'utilisateur ajoutera des produits de registre à l'application, chaque produit sera ajouté dans une rangée (avec ces colonnes, PID, Nome, etc.), Deuxièmement, les données seront reçues et ajouteront à la feuille de calcul, par exemple, nous avons PID = 1, si l'utilisateur ouvre le produit 1 sur l'application et mettez à jour certaines données ...
Lorsque le script reçoit les données (rangées avec ces colonnes), il convient de vérifier si le PID existe sur la feuille de calcul, le cas échéant, mettez à jour la ligne actuelle pid = 1, pas ajouter une nouvelle avec les mêmes valeurs, désolé pour mon mauvais anglais
@djalmafreestyler Merci de répondre. Je dois m'excuser pour ma mauvaise compétence en anglais. De votre réponse, que diriez-vous de supprimer feuille.AppendRow (Rowdata); code> de mon script modifié? Est-ce le résultat que vous attendez?
function doGet(request) { var sheet=SpreadsheetApp.openById("DOCUMENT_ID"); var data=sheet.getActiveSheet().getDataRange().getValues(); var updateIndex; try{ var pid=request.parameter.pid; var nome=request.parameter.nome; var desc=request.parameter.desc; var marca=request.parameter.marca; var tipo=request.parameter.tipo; var preco=request.parameter.preco; var ativado=request.parameter.ativado; var rowData=[pid, nome, desc, marca, tipo, preco, ativado]; for(var i=1; i < data.length; i++){ if(data[i][0] == pid){ updateIndex=i; break; } } sheet.getRange(updateIndex+1,1,1,rowData.length).setValues([rowData]); } catch(e){ console.log(e); } return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType); } Sheet.getRange(start row,start col,number of rows,number of columns)
Pourriez-vous s'il vous plaît expliquer ces paramètres à l'intérieur de gettrange ()?
Tout cela explique dans la référence que je viens d'ajouter.
Utilisation de votre code, je reçois cette exception: "Exception: Les paramètres (chaîne, numéro, numéro, numéro) ne correspondent pas à la signature de la méthode pour SpreadsheetApp.spreadsheet.getrange." On dirait que le premier paramètre est une chaîne, c'est étrange.
Même si je passe une chaîne, j'ai la même exception: feuille.getrange (updateIndex.tostring (), 1,1, rowdata.length) .se Tvalues (Rowdata);
J'ai résolu le problème et j'accepterai votre réponse, la chose était que la classe de feuille de calcul a gettrange (chaîne, numéro, numéro, numéro), ce que je cherchais est gettrange de la classe de feuilles (numéro, numéro, numéro, numéro) SO: var ss = tableur au tableurApp.getacteCursheadshshshshiche (). GetacetsHeet (); Cela fonctionne maintenant, merci.
Ma solution:
function doGet(request) { // Modified var sheet=SpreadsheetApp.openById("DOCUMENT_ID").getActiveSheet(); var data=sheet.getDataRange().getValues(); // var updateIndex; try{ var pid=request.parameter.pid; var nome=request.parameter.nome; var desc=request.parameter.desc; var marca=request.parameter.marca; var tipo=request.parameter.tipo; var preco=request.parameter.preco; var ativado=request.parameter.ativado; var rowData=[pid, nome, desc, marca, tipo, preco, ativado]; for(var i=1; i < data.length; i++){ if(data[i][0] == pid){ updateIndex=i; break; } } // Modifed sheet.getRange(updateIndex + 1, 1, 1, rowData.length).setValues( [rowData] ); // } catch(e){ console.log(e); } return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType); }
Bienvenue au débordement de la pile. Bien que ce code puisse répondre à la question, fournissant un contexte supplémentaire sur la manière et / ou pourquoi il résout le problème améliorerait la valeur à long terme de la réponse.
Même erreur que j'ai eu avec le code de Cooper: "Exception: Les paramètres (chaîne, numéro, numéro, numéro) ne correspondent pas à la signature de la méthode pour SpreadsheetApp.spreadsheet.getrange." Il semble être la méthode Getrange, premier paramètre demande une chaîne ...