google apps script - How do I delete individual responses in FormApp -


shouldn't formresponse have remove or delete response method? https://developers.google.com/apps-script/reference/forms/form-response

is there , i'm missing in docs?

i'm talking responses here not items.

nope, not there. , no external api fill gap.

so here's crazy idea.

you write script gets responses, calls deleteallresponses(), writes one(s) want deleted. you'd have summary info reflects responses care about, you'd have lost submission dates (...which add non-form data in spreadsheet), , submitter userid (in apps domains only, , again retain outside form).

whether or not compromises acceptable depend on intended use of form data is.

code

this forms-contained script simple menu & ui, delete indicated responses. content of deleted responses logged.

/**  * adds custom menu active form, containing single menu item  * invoking deleteresponsesui() specified below.  */ function onopen() {   formapp.getui()       .createmenu('my menu')       .additem('delete response(s)', 'deleteresponsesui')       .addtoui(); }  /**  * ui forms function, deleteresponses().  */ function deleteresponsesui() {   var ui = formapp.getui();   var response = ui.prompt("delete response(s)",                            "list of resonse #s delete, separated commas",                            ui.buttonset.ok_cancel);   if (response.getselectedbutton() == ui.button.ok) {     var deletecsv = response.getresponsetext();     var numdeleted = deleteresponses(deletecsv.split(/ *, */));     ui.alert("deleted "+numdeleted+" responses.", ui.buttonset.ok);   } }  /**  * deletes indicated response(s) form.  * caveat: timestamps remaining responses changed.  * deleted responses logged, cannot recovered.  *  * @parameter {number or number[]}   reponse(s) deleted, 0-indexed.  *  * @returns {number}                 number of responses deleted.  */ function deleteresponses(trash) {   if (!trash) throw new error( "missing parameter(s)" );   logger.log(json.stringify(trash))   if (!array.isarray(trash)) trash = [trash];    // if didn't array, fix    var form = formapp.getactiveform();   var responses = form.getresponses();    // feels should ask "are really, sure?"   form.deleteallresponses();    var numdeleted = 0;   (var = 0; < responses.length; i++) {     if ( trash.indexof(i.tostring()) !== -1 ) {       // response deleted       logger.log( "deleted response: " + json.stringify(itemizeresponse(responses[i] )) )       numdeleted++     }     else {       // response kept       var newresponse = form.createresponse();       var itemresponses = responses[i].getitemresponses();       (var j = 0; j < itemresponses.length; j++) {         newresponse.withitemresponse(itemresponses[j]);       }       newresponse.submit();     }   }   return numdeleted }  /**  * returns item responses javascript object (name/value pairs).  *  * @param {response}     form response object  *  * @returns              simple object item responses + timestamp  */ function itemizeresponse(response) {   if (!response) throw new error( "missing parameter(s)" );    var itemresponses = response.getitemresponses();   var itemizedresponse = {"timestamp":response.gettimestamp()};    (var j = 0; j < itemresponses.length; j++) {     itemizedresponse[itemresponses[j].getitem().gettitle()] = itemresponses[j].getresponse();   }   return itemizedresponse; } 

Comments

Popular posts from this blog

ruby on rails - RuntimeError: Circular dependency detected while autoloading constant - ActiveAdmin.register Role -

c++ - OpenMP unpredictable overhead -

javascript - Wordpress slider, not displayed 100% width -