i having issues when running script after recent api update. had issues able fix around here having id issue. unsure of coming because have few things id. help? here code if want run , picture of error looks like.
if want run need have folder called templates , document inside of there. inside of document needs {a} column in spreadsheet , should still give error, thanks!
function generatedocument(e) { var template = driveapp.getfilebyid(e.parameter.templates); logger.log(template.getname()); var sheet = spreadsheetapp.getactivespreadsheet(); var row = number(e.parameter.row) //+1; // remove // in line next +1 skip headers logger.log(row); var currentfid = e.parameter.curfid; logger.log(currentfid); var mydocid = template.makecopy(sheet.getrange('b' + row).getvalue() + ' - ' + sheet.getrange('e' + row).getvalue() + ' - ' + sheet.getrange('d' + row).getvalue() + ' - ' + sheet.getrange('x' + row).getvalue()).getid(); var mydoc = documentapp.openbyid(mydocid); var copybody = mydoc.getactivesection(); var sheet = spreadsheetapp.getactivespreadsheet(); //row--; // decrement row number in concordance real row numbers in sheet var myrow = spreadsheetapp.getactivespreadsheet().getrange(row + ":" + row); (var = 1; < sheet.getlastcolumn() + 1; i++) { var mycell = myrow.getcell(1, i); copybody.replacetext("{" + mycell.geta1notation().replace(row, "") + "}", mycell.getvalue()); } mydoc.saveandclose(); var destfolder = driveapp.getfolderbyid(currentfid); logger.log(mydocid); var doc = driveapp.getfilebyid(mydocid); // document again using driveapp time... doc.addtofolder(destfolder); // add desired folder doc.removefromfolder(driveapp.getrootfolder()); // did step step more easy follow var pdf = driveapp.getfilebyid(mydocid).getas("application/pdf"); destfolder.createfile(pdf); // create pdf file in folder var app = uiapp.getactiveapplication(); app.close(); return app; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function gettemplates() { var doc = spreadsheetapp.getactivespreadsheet(); var app = uiapp.createapplication().settitle('generate template'); // create grid 3 text boxes , corresponding labels var grid = app.creategrid(5, 2); grid.setwidget(0, 0, app.createlabel('template name:')); var list = app.createlistbox(); list.setname('templates'); grid.setwidget(0, 1, list); var folders = driveapp.getfoldersbyname("templates"); while (folders.hasnext()) { var folder = folders.next(); logger.log(folder.getname()); var allmyfilesbytype = folder.getfilesbytype(mimetype.google_docs) }; while (allmyfilesbytype.hasnext()) { var file = allmyfilesbytype.next(); list.additem(file.getname()); logger.log(file.getname()); }; grid.setwidget(1, 0, app.createlabel('row:')); var row = app.createtextbox().setname('row'); row.setvalue(spreadsheetapp.getactivespreadsheet().getactiverange().getrow()); grid.setwidget(1, 1, row); var curfn = app.createtextbox().settext('mydrive/').setname('curfn').setid('curfn').setwidth('400'); var curfid = app.createtextbox().settext(driveapp.getrootfolder().getid()).setname('curfid').setid('curfid').setvisible(false); var listf = app.createlistbox().setname('listf').setid('listf').additem('please select folder', 'x'); grid.settext(2, 0, 'type path:').setwidget(2, 1, curfn).settext(3, 0, 'or').settext(4, 0, 'choose path:').setwidget(4, 1, listf).setwidget(3, 1, curfid); var folders = driveapp.getrootfolder().getfolders(); while (folders.hasnext()) { var folder = folders.next(); listf.additem(folder.getname(),folder.getid()) }; var handlerf = app.createserverhandler('folderselect').addcallbackelement(grid); listf.addchangehandler(handlerf); var panel = app.createverticalpanel(); panel.add(grid); var button = app.createbutton('submit'); var handler = app.createserverclickhandler('generatedocument'); handler.addcallbackelement(grid); button.addclickhandler(handler); // add button panel , panel application, display application app in spreadsheet doc panel.add(button); app.add(panel); doc.show(app); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function folderselect(e) { var app = uiapp.getactiveapplication(); var currentfn = e.parameter.curfn; var currentfid = e.parameter.listf; logger.log(currentfid); var listf = app.getelementbyid('listf'); var curfn = app.getelementbyid('curfn'); var curfid = app.getelementbyid('curfid'); if (currentfid == 'x') { currentfid = driveapp.getrootfolder().getid(); curfn.settext('mydrive/') }; var startfolder = driveapp.getfolderbyid(currentfid); var folders = startfolder.getfolders(); listf.clear().additem('no more sub folders!', 'x').additem('go root', 'x'); if (folders.length > 0) { listf.clear(); listf.additem('select sub folder', 'x') }; while (folders.hasnext()) { var folder = folders.next(); listf.additem(folder.getname(),folder.getid()) }; curfn.settext(currentfn + driveapp.getfolderbyid(currentfid).getname() + '/'); if (currentfid == driveapp.getrootfolder().getid()) { curfn.settext('mydrive/') }; curfid.settext(currentfid); return app; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function onopen() { var ss = spreadsheetapp.getactivespreadsheet(); var menuentries = [{ name: "export row document", functionname: "gettemplates" }]; ss.addmenu("generate documents here!", menuentries); }
problem in statement
var template = driveapp.getfilebyid(e.parameter.templates);
when see e.parameter.templates name in logger file name. driveapp.getfilebyid expect file id.
the above problem can solved when add file id along file name in
list.additem(file.getname(),file.getid());
of gettemplates() method.
here working code
function generatedocument(e) { //logger.log(driveapp.getfilesbyname(e.parameter.templates).); //spreadsheetapp.getui().alert(e.parameter.templates); var template = driveapp.getfilebyid(e.parameter.templates); //logger.log(e.parameter.templates.getid()); var sheet = spreadsheetapp.getactivespreadsheet(); var row = number(e.parameter.row) //+1; // remove // in line next +1 skip headers logger.log(row); var currentfid = e.parameter.listf; logger.log(currentfid); var mydocid = template.makecopy(sheet.getrange('b' + row).getvalue() + ' - ' + sheet.getrange('e' + row).getvalue() + ' - ' + sheet.getrange('d' + row).getvalue() + ' - ' + sheet.getrange('x' + row).getvalue()).getid(); var mydoc = documentapp.openbyid(mydocid); var copybody = mydoc.getactivesection(); var sheet = spreadsheetapp.getactivespreadsheet(); //row--; // decrement row number in concordance real row numbers in sheet var myrow = spreadsheetapp.getactivespreadsheet().getrange(row + ":" + row); (var = 1; < sheet.getlastcolumn() + 1; i++) { var mycell = myrow.getcell(1, i); copybody.replacetext("{" + mycell.geta1notation().replace(row, "") + "}", mycell.getvalue()); } mydoc.saveandclose(); var destfolder = driveapp.getfolderbyid(currentfid); logger.log(mydocid); var doc = driveapp.getfilebyid(mydocid); // document again using driveapp time... destfolder.addfile(doc);//add filder var pdf = driveapp.getfilebyid(mydocid).getas("application/pdf"); destfolder.createfile(pdf); // create pdf file in folder var app = uiapp.getactiveapplication(); app.close(); return app; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function gettemplates() { var doc = spreadsheetapp.getactivespreadsheet(); var app = uiapp.createapplication().settitle('generate template'); // create grid 3 text boxes , corresponding labels var grid = app.creategrid(5, 2); grid.setwidget(0, 0, app.createlabel('template name:')); var list = app.createlistbox(); list.setname('templates'); grid.setwidget(0, 1, list); var folders = driveapp.getfoldersbyname("templates"); while (folders.hasnext()) { var folder = folders.next(); logger.log(folder.getname()); var allmyfilesbytype = folder.getfilesbytype(mimetype.google_docs) }; while (allmyfilesbytype.hasnext()) { var file = allmyfilesbytype.next(); list.additem(file.getname(),file.getid()); logger.log(file.getname()); }; grid.setwidget(1, 0, app.createlabel('row:')); var row = app.createtextbox().setname('row'); row.setvalue(spreadsheetapp.getactivespreadsheet().getactiverange().getrow()); grid.setwidget(1, 1, row); var curfn = app.createtextbox().settext('mydrive/').setname('curfn').setid('curfn').setwidth('400'); var curfid = app.createtextbox().settext(driveapp.getrootfolder().getid()).setname('curfid').setid('curfid').setvisible(false); var listf = app.createlistbox().setname('listf').setid('listf').additem('please select folder', 'x'); grid.settext(2, 0, 'type path:').setwidget(2, 1, curfn).settext(3, 0, 'or').settext(4, 0, 'choose path:').setwidget(4, 1, listf).setwidget(3, 1, curfid); var folders = driveapp.getrootfolder().getfolders(); while (folders.hasnext()) { var folder = folders.next(); listf.additem(folder.getname(),folder.getid()) }; var handlerf = app.createserverhandler('folderselect').addcallbackelement(grid); listf.addchangehandler(handlerf); var panel = app.createverticalpanel(); panel.add(grid); var button = app.createbutton('submit'); var handler = app.createserverclickhandler('generatedocument'); handler.addcallbackelement(grid); button.addclickhandler(handler); // add button panel , panel application, display application app in spreadsheet doc panel.add(button); app.add(panel); doc.show(app); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function folderselect(e) { var app = uiapp.getactiveapplication(); var currentfn = e.parameter.curfn; var currentfid = e.parameter.listf; logger.log(currentfid); var listf = app.getelementbyid('listf'); var curfn = app.getelementbyid('curfn'); var curfid = app.getelementbyid('curfid'); if (currentfid == 'x') { currentfid = driveapp.getrootfolder().getid(); curfn.settext('mydrive/') }; var startfolder = driveapp.getfolderbyid(currentfid); var folders = startfolder.getfolders(); listf.clear().additem('no more sub folders!', 'x').additem('go root', 'x'); if (folders.length > 0) { listf.clear(); listf.additem('select sub folder', 'x') }; while (folders.hasnext()) { var folder = folders.next(); listf.additem(folder.getname(),folder.getid()) }; curfn.settext(currentfn + driveapp.getfolderbyid(currentfid).getname() + '/'); if (currentfid == driveapp.getrootfolder().getid()) { curfn.settext('mydrive/') }; curfid.settext(currentfid); return app; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function onopen() { var ss = spreadsheetapp.getactivespreadsheet(); var menuentries = [{ name: "export row document", functionname: "gettemplates" }]; ss.addmenu("generate documents here!", menuentries); }