Comment mettre du texte à la ligne dans le label

oui , avec le bloc d'encodage j'ai le message d'erreur.
Je pense que le problème c'est la cellule dans googlesheet qui reçoit les données sur une seule ligne et donc l'application lit les données de la cellule tel qu'elle est (sur une ligne).
Essayez de faire un test et vous verrez !

est ce qu'il faut garder le bloc "Encode Uri" ou non ?

j'ai mis les blocs comme ça, mais j'ai une erreur, j'ai obtenu la réponse ci-dessous

Capture5

image

You have not included a function (func) ?

Also your url is incorrectly formatted, you have two "?" and you cannot set parameters to an "export?format-csv" request other than the gid and the range.

image

image

image

I will do a test on uploading a text with line returns now

Aha !

image

image

function doGet(e) {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName("Sheet2");
  var rng = sh.getRange("A1");
  rng.setValue(e.parameter.label);
  SpreadsheetApp.flush();
  var data = rng.getValue();
  return ContentService.createTextOutput(data);

}
1 Like

The JSON.stringify?

The raw responseContent is:
www\nyyy\nzzz
//can't use triple x on the community so substituted with triple w

but use a jsonTextDecode block on it and you get:

image

abridged script

...
  var data = rng.getValue();
  return ContentService.createTextOutput(JSON.stringify(data));
}

You do have to use a uri encode block on the textbox.text with multiple lines, otherwise these get removed when posting the data to google sheets.

1 Like

holàlà je suis perdu, car comme j'ai déjà un script et les blocs qui fonctionnent sans problème, j'ai peur de faire n'importe quoi !!!
pouvez vous me dire comment vous placerait les blocs et comment vous corrigerait le script pour pouvoir lire les données (Repas) avec plusieurs ligne ?
merci de votre aide.

voici les blocs = le bouton2 sert à lire les données, le bouton22 sert à modifier les données.

voici le script = les données que je voudrais lire sur plusieurs lignes sont "e.parameter.repas, e.parameter.soins", elles correspondent à la colonne C et F.

function doGet(e) {

var ss = SpreadsheetApp.openById('1BSUDHn08h6YlrtgfeoQEVhjdvNp3rGPxZiTVq9r-bSY');
var sheet = ss.getSheetByName("Sheet1");
var sh = ss.getSheetByName("Sheet2");
var nom = e.parameter.nom ;
var motdepasse = e.parameter.motdepasse ;
var msg;

if ( e.parameter.func == "register" ) {
sheet.appendRow([nom,motdepasse]);
sh.appendRow([nom]);
return ContentService.createTextOutput("Nouveau compte");
}

else if ( e.parameter.func == "testLogin" ) {
var msg = "Information incorrecte";
var loginData = sheet.getDataRange().getValues();
for ( var i = 0; i < loginData.length; i++ ) {
if ( nom == loginData[i][0] && motdepasse == loginData[i][1] ) {
msg = "connecté";
}
}
return ContentService.createTextOutput(msg);

}

else if ( e.parameter.func == "supprimer" ) {
var loginData = sheet.getDataRange().getValues();
for (var i = 0; i < loginData.length; i++ ) {
if ( nom == loginData[i][0] && motdepasse == loginData[i][1] ) {
msg = "compte supprimé";
sheet.deleteRow(i+1);
}
}
var reportData = sh.getDataRange().getValues();
for (var i = 0; i < reportData.length; i++ ) {
if ( nom == reportData[i][0] ) {
msg = "compte supprimé";
sh.deleteRow(i+1);
}
}
return ContentService.createTextOutput(msg);
}

if (e.parameter.func == "WriteReadReport") {
var nom = e.parameter.nom ;
var date = e.parameter.date ;
var repas = e.parameter.repas ;
var change = e.parameter.change ;
var sieste = e.parameter.sieste ;
var soins = e.parameter.soins ;
var photo1 = e.parameter.photo1;
var photo2 = e.parameter.photo2;
var transmission = e.parameter.transmission ;
var imageenfant = e.parameter.imageenfant;
sh.appendRow([nom,date,repas,change,sieste,soins,photo1,photo2,transmission,imageenfant]);
SpreadsheetApp.flush();
var ref = [ ];
var rg = sh.getDataRange().getValues();
for (var i=0;i<rg.length;i++) {
if (rg[i][0] == nom) {
ref.push(rg[i][0]);
ref.push(Utilities.formatDate(rg[i][1],Session.getScriptTimeZone(), 'dd-MM-YYYY'));
ref.push(rg[i][2]);
ref.push(rg[i][3]);
ref.push(rg[i][4]);
ref.push(rg[i][5]);
ref.push(rg[i][6]);
ref.push(rg[i][7]);
ref.push(rg[i][8]);
ref.push(rg[i][9]);
}
}

return ContentService.createTextOutput(JSON.stringify(ref)).setMimeType(ContentService.MimeType.JSON);

}

if (e.parameter.func == "Read"){

SpreadsheetApp.flush();   
var ref = [      ];

var rg = sh.getDataRange().getValues();
for (var i=0;i<rg.length;i++) {
if (rg[i][0] == nom) {
ref.push(rg[i][0]);
ref.push(Utilities.formatDate(rg[i][1],Session.getScriptTimeZone(), 'dd-MM-YYYY'));
ref.push(rg[i][2]);
ref.push(rg[i][3]);
ref.push(rg[i][4]);
ref.push(rg[i][5]);
ref.push(rg[i][6]);
ref.push(rg[i][7]);
ref.push(rg[i][8]);
ref.push(rg[i][9]);
}
}

return ContentService.createTextOutput(JSON.stringify(ref)).setMimeType(ContentService.MimeType.JSON);

}

if (e.parameter.func == "Modifier"){
var ss = SpreadsheetApp.openById(e.parameter.ID);
var sh = ss.getSheetByName(e.parameter.SH);
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 = sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).getDisplayValues();

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

}

I have shown you everything required in my posts above.

oui j'ai vu, mais je suis perdu par rapport à comment placer les bon blocs au bon endroit et le script aussi !
alors , avant que je déplace les blocs est ce que le script est correct ?
j'ai rajouté vos infos au début et ContentService.createTextOutput (data) est dans la func Read

function doGet(e) {
 
  var ss = SpreadsheetApp.openById('1BSUDHn08h6YlrtgfeoQEVhjdvNp3rGPxZiTVq9r-bSY');
  var sheet = ss.getSheetByName("Sheet1"); 
  var sh = ss.getSheetByName("Sheet2"); 
  var nom = e.parameter.nom ; 
  var motdepasse = e.parameter.motdepasse ;
  var msg;
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName("Sheet2");
  var rng = sh.getRange("C,F");
  rng.setValue(e.parameter.label);
  SpreadsheetApp.flush();
  var data = rng.getValue();
  


  if ( e.parameter.func == "register" ) { 
    sheet.appendRow([nom,motdepasse]);
    sh.appendRow([nom]);
    return ContentService.createTextOutput("Nouveau compte"); 
  } 
  
  else if ( e.parameter.func == "testLogin" ) {
    var msg = "Information incorrecte";
    var loginData = sheet.getDataRange().getValues();
    for ( var i = 0; i < loginData.length; i++ ) {
      if ( nom == loginData[i][0]  && motdepasse == loginData[i][1] ) {
        msg = "connecté";
    }
  }
    return ContentService.createTextOutput(msg);

    
  }

  else if ( e.parameter.func == "supprimer" ) { 
   var loginData = sheet.getDataRange().getValues();
   for (var i = 0; i < loginData.length; i++ ) {
   if ( nom == loginData[i][0]  && motdepasse == loginData[i][1] ) {
        msg = "compte supprimé";  
        sheet.deleteRow(i+1);
    }
   }
   var reportData = sh.getDataRange().getValues();
   for (var i = 0; i < reportData.length; i++ ) {
     if ( nom == reportData[i][0] ) {
          msg = "compte supprimé";  
          sh.deleteRow(i+1);
     }
   }
   return ContentService.createTextOutput(msg);
    }
  

   if (e.parameter.func == "WriteReadReport") { 
    var nom = e.parameter.nom ;
    var date = e.parameter.date ;
    var repas = e.parameter.repas ;
    var change = e.parameter.change ;
    var sieste = e.parameter.sieste ;
    var soins = e.parameter.soins ;
    var photo1 = e.parameter.photo1;
    var photo2 = e.parameter.photo2;
    var transmission = e.parameter.transmission ;
    var imageenfant = e.parameter.imageenfant;
    sh.appendRow([nom,date,repas,change,sieste,soins,photo1,photo2,transmission,imageenfant]);
    SpreadsheetApp.flush();
    var ref = [    ];
  var rg = sh.getDataRange().getValues();
  for (var i=0;i<rg.length;i++) {
    if (rg[i][0] == nom) {
      ref.push(rg[i][0]);
      ref.push(Utilities.formatDate(rg[i][1],Session.getScriptTimeZone(), 'dd-MM-YYYY'));
      ref.push(rg[i][2]);
      ref.push(rg[i][3]);
      ref.push(rg[i][4]);
      ref.push(rg[i][5]);
      ref.push(rg[i][6]);
      ref.push(rg[i][7]);
      ref.push(rg[i][8]);
      ref.push(rg[i][9]);
    }
  }

  return ContentService.createTextOutput(JSON.stringify(ref)).setMimeType(ContentService.MimeType.JSON);

  }

  if (e.parameter.func == "Read"){
    
    SpreadsheetApp.flush();   
    var ref = [    ];
  var rg = sh.getDataRange().getValues();
  for (var i=0;i<rg.length;i++) {
    if (rg[i][0] == nom) {
      ref.push(rg[i][0]);
      ref.push(Utilities.formatDate(rg[i][1],Session.getScriptTimeZone(), 'dd-MM-YYYY'));
      ref.push(rg[i][2]);
      ref.push(rg[i][3]);
      ref.push(rg[i][4]);
      ref.push(rg[i][5]);
      ref.push(rg[i][6]);
      ref.push(rg[i][7]);
      ref.push(rg[i][8]);
      ref.push(rg[i][9]);
    }
  }

  return ContentService.createTextOutput(JSON.stringify(ref)).setMimeType(ContentService.MimeType.JSON),(data);
  
}

 if (e.parameter.func == "Modifier"){
  var ss = SpreadsheetApp.openById(e.parameter.ID);
  var sh = ss.getSheetByName(e.parameter.SH);
  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 = sh.getRange(parseInt(rowid) + 1,1,1,data[0].length).getDisplayValues();


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

}

est ce que vous pensez que le script est correct ?

c'est quoi ce bloc (avec plusieurs lignes) ?

un bloc d'encodage uri sur le textbox.text avec plusieurs lignes,

Yes, you need to use the Uri encode block in the field with multiple lines and, when receiving it, the JsonTextDecode.

le bloc d'encodage Uri je l'utilise déjà mais je ne comprends pas dans " le champs à plusieurs lignes" , avez vous un exemple ?

All of this is because you have a multiple-lines field you want to store in googleSheets and then recover it, isn't it?

Then you need, when forming the Web.Uri, use the Uri encode block for that field (with multiple lines).

oui c'est ça je veux stocker et récupérer le champs avec plusieurs lignes,
oui j'utilise Uri et JsonTextDecode, j'ai fourni mes blocs plus haut ou l'on peut voir ça.

I eventually came up with a fix for this problem, mostly related to the complexities of the aia project.

The fix was two part, half in the blocks and half in the google apps script:

If there was a line return in the text, this got converted, by substitution to a | in the app before being send to the script. The script then converted this back to a line return so that it displayed correctly in the spreadsheet. When data was called from the spreadsheet the line return is converted back to a | for sending to the app, and once it arrives at the app it is converted back to a line return for display.

In the app:

image

in the script:

extract...

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 newData = [];
  var data = JSON.parse('[' + e.parameter.DATA + ']');
// first replacement here  
    for (var j=0; j<data[0].length; j++) {
        newData.push(data[0][j].replaceAll('|','\n'));      
      }

      for (var i=0;i<rows.length;i++) {
      if ( e.parameter.nom == rows[i][0] ) {
        rowid = (i);
      }
    }
  newData = [newData];
  sh1.getRange((parseInt(rowid) + 1),1,1,data[0].length).setValues(newData);
  SpreadsheetApp.flush();
  var returnData = [];
  newRow = sh1.getRange((parseInt(rowid) + 1),1,1,data[0].length).getValues();
// second replacement here
    for (var n=0; n<newRow[0].length; n++) {
        returnData.push(newRow[0][n].replaceAll('\n','|'));
    }
  returnData = [returnData];
  return ContentService.createTextOutput(JSON.stringify(returnData));
}

Sounds like a long way round, but the only method I could get to, with this particular project, that worked.

2 Likes

Merci beaucoup, je vais essayer

oui ça fonctionne :+1:

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.