0
votes

Script d'application Google: Téléchargez un fichier CSV du service HTML

J'essaie de télécharger un fichier CSV à partir d'un service HTML dans Google Feuilles et, après quelques recherches, j'ai trouvé du code qui semblait fonctionner à l'époque:

Call de service HTML strong> : P>

function processForm(form) {
  let fileBlob=form.analysisCsv;
//  sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Table_Analysis");
//  let lastRow = sheet.getLastRow();
//  let values = []
//  let rows = fileBlob.contents.split('\n');
//  for(let r=0; r<rows.length; ++r){
//    values.push( rows[r].split(';') );
//  }
//  for (var i = 0; i < values.length; i++) {
//    sheet.getRange(lastRow+i+1, 1, 1, values[i].length).setValues(new Array(values[i]));
//  }  
}


5 commentaires

Pourriez-vous essayer de renommer le nom de la fonction à quelque chose comme Receforme ?


Est-ce que cela répond à votre question? Téléchargement d'un fichier à l'aide d'un service htmlservice Formulaire dans Google Apps provoque toujours des "erreurs de serveur" et une trace de pile


Essayez d'utiliser quelque chose comme google.script.run.proccessform (this.parentnode)


Pourriez-vous essayer d'utiliser la version stable du script d'applications au lieu de V8 au cas où c'est le problème et laissez-moi savoir comment est-il allé avec ça? Pour ce faire, suivez ces étapes: Ouvrez l'éditeur de script. Dans le menu supérieur, sélectionnez Affichage> Afficher le fichier Manifest. Dans la liste des fichiers, ouvrez AppsScript.json. Remplacez "RuntimeVersion": "V8" avec "RuntimeVersion": Sauvegarde "Stable" Enregistrer.


Lorsque je change "V8" pour "Stable", je reçois une erreur "manquante; signer avant l'instruction" et je ne peux pas suivre d'où vient.


3 Réponses :


0
votes

Vous ne pouvez pas fournir dopost () avec un paramètre. À partir de la documentation:

Lorsqu'un utilisateur visit une application ou un programme envoie l'application une demande HTTP GET, le script Apps exécute la fonction DOKET (E). Lorsqu'un programme envoie l'application une demande de courrier HTTP, le script Apps est exécuté dopost (E) à la place. Dans les deux cas, l'argument E représente un paramètre d'événement pouvant contenir des informations sur les paramètres de la demande. La structure de l'objet événement est indiquée dans le tableau ci-dessous: Code> Et Voici un lien vers ce P>

comme J'ai indiqué dans mon commentaire au-dessus d'un simple moyen de transmettre une forme au serveur est: p>

google.script.run.proccessform (this.parentnode) code> P>

Et ceci est expliqué ici et partiellement ICI P>

Eh bien, j'ai enfin couru votre code moi-même et bien sûr, il ne fonctionne pas en V8. strong> p>

donc j'ai déménagé dans l'ancienne version et c'est le code que j'ai utilisé: p>

gs: p>

<!DOCTYPE html>
  <html>
    <head>
    <base target="_top">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    </head>
    <body>
      <form>
        <input type="file" name="analysisCsv" accept=".csv">
        <input type="button" value="Save" onclick="intermediate(this.parentNode);">
        <div id="msg"></div>
      </form>
      <script>
        function intermediate(obj) {
          google.script.run
          .withSuccessHandler(function(msg){$('#msg').html(msg);google.script.host.close();})
          .processForm(obj);
        }
        console.log('My Code');
      </script>
    </body>
  </html>


8 commentaires

Merci, j'ai changé le nom de la fonction mais l'erreur est toujours là.


Voici un exemple que vous pouvez jeter un coup d'œil à: Stackoverflow.com/a/57581534/7215091


C'est fondamentalement le même code, à l'exception de la fonction Server est appelée Script au lieu du corps. Je l'ai essayé mais j'ai toujours la même erreur.


Juste curieux mais pourquoi avez-vous commenté votre code?


Je voulais juste être sûr que l'erreur n'était pas causée par un autre code, mais cela se produit sur la ligne 1 (appel de la fonction).


Eh bien, je réussissais enfin le code et en V8, cela ne fonctionne pas mais dans Rhino, cela fonctionne.


Oui, j'essaie de le courir en héritage mais cela montre un "manquant;" Erreur, j'essaie toujours de trouver d'où vient.


Très bien, je devais me débarrasser de la syntaxe V8 (Let, pour ...), maintenant ça marche en héritage! Merci



1
votes

Donc, pour résumer, je devais forcer le héritage d'exécution: Sélectionnez Exécuter> Désactiver les nouvelles applications Script Runtime Powered by V8. Puis modifiez toute la syntaxe V8: Remplacez "Let" par "Var" principalement. Maintenant, ça marche, grâce à tous.

voir https://developers.google.com/apps-script/guides/ V8-Runtime / Migration https://developers.google.com/apps-script/guides/ V8-Runtime # Enabling_the_v8_Runtime


0 commentaires

0
votes

Voici ma solution à l'aide de Client-Client-côté FileReader API :

code.gs : xxx

index.html : : : xxx


0 commentaires