Upload an image to a Google spreadsheet

后端 未结 5 976
长情又很酷
长情又很酷 2020-11-30 06:59

I am making a photo shooting contest, the competitor should register using a Google registration form, and upload his photo as well. I searched all over the internet to find

5条回答
  •  长情又很酷
    2020-11-30 07:46

    Thanks to jfreake recent post I ended up solving all the issues, including show the images in the spreadsheet itself. Here is the final code I post in a separate answer for comfort and readbility.

    var submissionSSKey = '0AnqSFd3iikE3dGFsUWNpb08zVWx5YjFRckloZ0NFZGc';
    var docurl = 'https://docs.google.com/document/d/1E6yoROb52QjICsEbGVXIBdz8KhdFU_5gimWlJUbu8DI/'
    var listitems = ['Select a category','Portrait','Landscape','Nude','Night shots','Nature','Various']
    var Panelstyle = {'background':'#ffffdffffd','padding':'40px','borderStyle':'solid','borderWidth':'10PX','borderColor':'#bbbbbb'}
    
    function doGet() {
      var app = UiApp.createApplication().setTitle('Photography contest').setStyleAttribute('padding','50PX');
      var panel = app.createFormPanel().setStyleAttributes(Panelstyle).setPixelSize(400, 200);
      var title = app.createHTML('Photography contest').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('Submit'); 
      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('PLEASE WAIT WHILE THE FILE IS UPLOADING').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
    }
    

    links are the same : app SS doc

提交回复
热议问题