Сохранение информации в гугл листах из моей формы - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь сохранить файл на диске Google и информацию в листах Google. Но информация в Sheets приходит как Java.object.

Вот как это выглядит в Code.gs:

var FOLDER_ID = '1jxBwrsz0JdBHcADpUUMespe';
var SHEET_ID = '1oJcKQ2RrtxxE1mn_CP-UAHefDxV7zg4';

function doPost(e) {
    var data = Utilities.base64Decode(e.parameters.data);
    var blob = Utilities.newBlob(data, e.parameters.mimetype, e.parameters.name);
    var folder = DriveApp.getFolderById(FOLDER_ID);
    var file = folder.createFile(blob);
    folder.createFolder(name)
    var res = [];


    SpreadsheetApp.openById(SHEET_ID).getSheets()[0].appendRow([e.parameters.name, file.getUrl()].concat(res));

    return ContentService.createTextOutput("Done.")

}

Вот как это выглядит в файле HTML:

<form action="https://script.google.com/macros/s/AKfycbxkzg6ud1VyTI2W4gs-CRJRS3i3qLDXQIGevtyy/exec" id="form" method="post">
    <div id="data"></div>
    <div class="form-group">
        <label for="name">Имя</label>
        <input type="text" id='name' name="name" placeholder="Имя" />
    </div>
    <div class="form-group">
        <label for="comment">Комм</label>
        <input type="text" name="comment" placeholder="Комментарий" />
    </div>
    <input name="file" id="uploadfile" type="file">
    <input id="submit" type="submit">
</form>
<script>
    $('#uploadfile').on("change", function() {
        var file = this.files[0];
        var fr = new FileReader();
        var name = $('#name').value;
        fr.fileName = file.name
        fr.onload = function(e) {

            e.target.result
            html = '<input type="hidden" name="data" value="' + e.target.result.replace(/^.*,/, '') + '" >';
            html += '<input type="hidden" name="mimetype" value="' + e.target.result.match(/^.*(?=;)/)[0] + '" >';
            html += '<input type="hidden" name="filename" value="' + e.target.fileName + '" >';
            html += '<input type="hidden" name="name" value="' + name + '" >';


            $("#data").empty().append(html);
        }
        fr.readAsDataURL(file);
    });
</script> 

Результат в гугл листе

Как получить данные в читаемом формате?

1 Ответ

0 голосов
/ 05 сентября 2018

Лично я никогда не пользуюсь формами. Вот примеры, которые создают 5 текстовых полей. Проверяет, что вы что-то положили в них, и возвращает код на сервер через google.script.run для дальнейшей обработки (т. Е. Logger.log данных). Я создаю html-сервер и загружаю его в событие готовности DOM с помощью JQuery.

Codes.gs

function buildForm(){
  var s='';
  for(var i=0;i<5;i++){
    s+=Utilities.formatString('<br /><input class="jim" type="text" value="" id="%s" />%s',"txt" + i,"text" + Number(i+1));
  }
  s+='<br /><input type="button" value="Submit" onClick="getValues();" /><input type="button" value="Close" onClick="google.script.host.close();" />';
  return s;
}
function saveValues(A){
  for(var i=0;i<A.length;i++){
    Logger.log('\nid=%s\nvalue=%s',A[i].id,A[i].value);
  }
}
function showFormDialog(){
  var ui=HtmlService.createHtmlOutputFromFile('form')
  SpreadsheetApp.getUi().showModelessDialog(ui,'My Form');
}

form.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
    $(function(){
      google.script.run
      .withSuccessHandler(function(html){$('#form').html(html);})
      .buildForm();
    });
    function getValues(){
      var elements=document.getElementsByClassName('jim');
      var el=[];
      console.log('elements.length=%s',elements.length);
      for(var i=0;i<elements.length;i++){
        var obj={};
        obj['id']='txt' + i;
        obj['value']=$('#' + 'txt' + i).val();
        el.push(obj);
      }
      var dataValid=true;
      for(var i=0;i<el.length;i++){
        console.log('id=%s, value=%s',el[i].id, el[i].value);
        if(!el[i].value){
          dataValid=false;
          $('#'+el[i].id).css('background','#ffff00');
        }else{
          $('#'+el[i].id).css('background','#ffffff');
        }
      }
      if(dataValid){
        google.script.run.saveValues(el);
      }else{
        alert('Invalid Data Found...Try again sucker....');
      } 
    }
    console.log('MyCode');
    </script>
    <style>
      input {margin:5px 5px 0 0;}
    </style>
  </head>
  <body>
    <div id="form"></div>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...