Загрузка данных и изображения в электронную таблицу Google

Я пытаюсь, чтобы пользователи заполнили форму, и у меня есть вся форма здесь https://docs.google.com/forms/d/1mjDLcGvcVlSG0Tjfx2ZEvGdrFqvQo-ezaB1A4vaBFK8/viewform

Я прочитал ответы здесь Загрузить изображение в электронную таблицу Google У меня две проблемы:

  1. Как вызвать форму, которая у меня есть, а не ту, что в этом коде

    var submissionSSKey = 'google sskey';
    var docurl = 'google form url'
    var listitems = ['Gender','Male','Female']
    var Panelstyle = {'background':'#dddddd','padding':'40px','borderStyle':'solid','borderWidth':'10PX','borderColor':'#bbbbbb'}
    
    function doGet() {
      var app = UiApp.createApplication().setTitle('Biodata').setStyleAttribute('padding','50PX');
      var panel = app.createFormPanel().setStyleAttributes(Panelstyle).setPixelSize(400, 200);
      var title = app.createHTML('<B>89 Law School Class Alumni Biodata</B>').setStyleAttribute('color','grey').setStyleAttribute('fontSize','25PX');
      var grid = app.createGrid(6,2).setId('grid');
      var list1 = app.createListBox().setName('list1').setWidth('130');
       for(var i in listitems){list1.addItem(listitems[i])}    
      var Textbox1 = app.createTextBox().setWidth('150px').setName('TB1');
      var email = app.createTextBox().setWidth('150px').setName('mail');
      var upLoad = app.createFileUpload().setName('uploadedFile');
      var submitButton = app.createSubmitButton('<B>Submit</B>'); 
      var warning = app.createHTML('Please fill in all fields').setStyleAttribute('background','#bbbbbb').setStyleAttribute('fontSize','18px');
      //file upload
      var cliHandler2 = app.createClientHandler()
      .validateLength(Textbox1, 1, 40).validateNotMatches(list1,'Select a category').validateEmail(email).validateNotMatches(upLoad, 'FileUpload')
      .forTargets(submitButton).setEnabled(true)
      .forTargets(warning).setHTML('Now you can submit your form').setStyleAttribute('background','#99FF99').setStyleAttribute('fontSize','12px');
    
      //Grid layout of items on form
      grid.setWidget(0, 1, title)
          .setText(1, 0, 'Category')
          .setWidget(1, 1, list1.addClickHandler(cliHandler2))
          .setText(2, 0, 'Name')
          .setWidget(2, 1, Textbox1.addClickHandler(cliHandler2))
          .setText(3, 0, 'Email')
          .setWidget(3, 1, email)
          .setText(4, 0, 'Image File')
          .setWidget(4, 1, upLoad.addChangeHandler(cliHandler2))
          .setWidget(5, 0, submitButton)
          .setWidget(5, 1, warning);
    
      var cliHandler = app.createClientHandler().forTargets(warning).setHTML('<B>PLEASE WAIT WHILE THE FILE IS UPLOADING<B>').setStyleAttribute('background','yellow');
      submitButton.addClickHandler(cliHandler).setEnabled(false);  
      panel.add(grid);
      app.add(panel);
      return app;
    }
    
    
    function doPost(e) {
      var app = UiApp.getActiveApplication();
      var ListVal = e.parameter.list1;
      var textVal = e.parameter.TB1;
      var Email = e.parameter.mail;
      var fileBlob = e.parameter.uploadedFile;
      var blob = fileBlob.setContentTypeFromExtension()
      var img = DocsList.createFile(blob);
      try{
      var folder = DocsList.getFolder('photos');
      }catch(e){DocsList.createFolder('photos');var folder = DocsList.getFolder('photos')}
      img.addToFolder(folder);
      img.removeFromFolder(DocsList.getRootFolder());
      var weight = parseInt(img.getSize()/1000);
      var sheet = SpreadsheetApp.openById(submissionSSKey).getSheetByName('Sheet1');
      var lastRow = sheet.getLastRow();
      var targetRange = sheet.getRange(lastRow+1, 1, 1, 4).setValues([[ListVal,textVal,Email,"https://drive.google.com/uc?export=view&id="+img.getId()]]);
      var imageInsert = sheet.getRange(lastRow+1, 5).setFormula('=image("https://drive.google.com/uc?export=view&id='+img.getId()+'")');
      sheet.setRowHeight(lastRow+1, 80);
      var GDoc = DocumentApp.openByUrl(docurl)
      GDoc.appendTable([['Category : '+ListVal,'Name : '+textVal,'Email : '+Email]])
      var inlineI = GDoc.appendImage(img);
      var width = inlineI.getWidth();
      var newW = width;
      var height = inlineI.getHeight();
      var newH = height;
      var ratio = width/height;
      Logger.log('w='+width+'h='+height+' ratio='+ratio);
      if(width>640){
      newW = 640;
      newH = parseInt(newW/ratio);
      }
      inlineI.setWidth(newW).setHeight(newH)
      GDoc.appendParagraph('IMAGE size : '+width+' x '+height+' (eventually) resized to '+newW+' x '+newH+' for PREVIEW ('+weight+' kB)   ');
      GDoc.appendHorizontalRule();
      GDoc.saveAndClose();
      app.add(app.createLabel('Thank you for submitting'));
      return app
    }
    
  1. Я получаю сообщение «Невозможно прочитать свойство «параметр» из неопределенного» при запуске doPost(e)

Есть идеи, что мне делать, пожалуйста? я немного отстаю от графика

Большое спасибо


person MARVEL    schedule 26.10.2014    source источник


Ответы (1)


в связи с вашими 2 вопросами:

  1. Нельзя смешивать форму, созданную с помощью FormApp, и форму созданный с использованием UiApp, вам нужно будет создать всю форму используя UiApp, если вы хотите сохранить функцию загрузки файлов как есть. В качестве альтернативы вы, конечно, можете создать всю форму с помощью HTMLService, если вы с html удобнее...
  2. Если вы попытаетесь запустить функцию doPost из редактора сценариев, вы всегда получите неопределенное значение для e, поскольку e на самом деле является информацией о событии, которая содержит все элементы, возвращаемые вызовом doGet (также известный как элемент обратного вызова).

Я смотрел на вашу форму и думаю, что ее довольно легко перенести в UiApp, поскольку все поля представляют собой простые элементы textBox. Сообщение, которое вы использовали, использует clientHandlers, чтобы сделать некоторые поля обязательными, чтобы у вас была вся необходимая информация для создания собственной формы.

Если вы хотите, чтобы она «выглядела» как ваша форма, просто измените атрибуты стиля панели и, в конечном итоге, добавьте дополнительные атрибуты стиля к некоторым элементам. Доступные стили CSS можно просмотреть здесь.

person Serge insas    schedule 26.10.2014
comment
Спасибо, Серж! Я думаю, что начну с HTML-сервиса, так как html для меня хорошо знаком. Я уверен, что тоже хотел бы узнать, как работает UiApp. Если бы я мог получить несколько указателей. Еще одна вещь, вопрос, на который я ссылался, я пытался протестировать вашу форму (последнюю), кнопка отправки, похоже, не работала. - person MARVEL; 26.10.2014
comment
Не за что ;-) Я только что протестировал его (снова), и он работает нормально... Вы заполнили все поля и получили сообщение «Теперь вы можете отправить свою форму» с зеленым фоном? - person Serge insas; 26.10.2014
comment
Я все заполнил. Да, я ожидал увидеть сообщение, так как видел его в коде. эт я не видел. Я только что попробовал сейчас, и это сделало. Это наверное моя связь. - person MARVEL; 26.10.2014
comment
Итак, я застрял! Не могли бы вы рассказать мне, как я это делаю, используя html-форму. Я не знаю, какое действие дать моей форме. У меня есть это ‹form action= method=POST id=ss-form target=_self onsubmit=›‹/form› - person MARVEL; 26.10.2014
comment
На этом сайте есть примеры, ищите HTML-форму в теге Google-Apps-Script - person Serge insas; 26.10.2014
comment
Все еще есть проблемы, и я не хочу нарушать правило не помещать расширенное обсуждение в комментарий. Могу ли я отправить вам электронное письмо или пообщаться в видеовстрече или что-то в этом роде. Может быть, вы могли бы помочь. Синтаксисы, которые я искал, не имеют отношения - person MARVEL; 27.10.2014