{"id":57,"date":"2017-04-05T13:30:49","date_gmt":"2017-04-05T13:30:49","guid":{"rendered":"http:\/\/sci-tech-blog.com\/?p=57"},"modified":"2017-04-05T13:33:33","modified_gmt":"2017-04-05T13:33:33","slug":"%d1%81%d1%86%d0%b5%d0%bd%d0%b0%d1%80%d0%b8%d0%b9-%d0%b4%d0%bb%d1%8f-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b4%d0%be%d0%ba%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-google-%d0%b8%d0%b7","status":"publish","type":"post","link":"https:\/\/sci-tech-blog.com\/?p=57","title":{"rendered":"\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 Google \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Google"},"content":{"rendered":"<div class=\"toc tableofcontent\">\n<div class=\"toc tableofcontent\">\n<p>Original version: <a href=\"https:\/\/opensourcehacker.com\/2013\/01\/21\/script-for-generating-google-documents-from-google-spreadsheet-data-source\/\">https:\/\/opensourcehacker.com\/2013\/01\/21\/script-for-generating-google-documents-from-google-spreadsheet-data-source\/<\/a><\/p>\n<h2>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h2>\n<p><a href=\"https:\/\/opensourcehacker.com\/2013\/01\/21\/script-for-generating-google-documents-from-google-spreadsheet-data-source\/#Ingredients_of_the_document_generator\">1. \u0418\u043d\u0433\u0440\u0435\u0434\u0438\u0435\u043d\u0442\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/a><\/p>\n<p><a href=\"https:\/\/opensourcehacker.com\/2013\/01\/21\/script-for-generating-google-documents-from-google-spreadsheet-data-source\/#Short_introduction_to_Google_Apps_Script\">2. \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 Google Apps Script<\/a><\/p>\n<p><a href=\"https:\/\/opensourcehacker.com\/2013\/01\/21\/script-for-generating-google-documents-from-google-spreadsheet-data-source\/#The_generator_script\">3. \u0421\u043a\u0440\u0438\u043f\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/a><\/p>\n<\/div>\n<\/div>\n<div class=\"tableofcontent-end\">Microsoft Office \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u00ab\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u041f\u0438\u0441\u044c\u043c\u0430, \u0441\u0447\u0435\u0442\u0430-\u0444\u0430\u043a\u0442\u0443\u0440\u044b, \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0435 \u043d\u0430\u043a\u043b\u0435\u0439\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 Microsoft Word \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 Microsoft Excel. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043c\u0430\u043b\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \u0438 \u0443 Office \u0435\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0435\u0435 \u0441 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b 90-\u0445 \u0433\u043e\u0434\u043e\u0432. Google Apps, \u043e\u0431\u043b\u0430\u0447\u043d\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 Microsoft Office, \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e (\u0438\u043b\u0438, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0435\u0435). \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 Google Apps, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u043b\u0430\u0434\u0435\u0435\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u0412 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u0433\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 Google Apps.<\/div>\n<h2 id=\"Ingredients_of_the_document_generator\">1. \u0418\u043d\u0433\u0440\u0435\u0434\u0438\u0435\u043d\u0442\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/h2>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/p>\n<ul>\n<li>\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 Google Apps, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u0445.<\/li>\n<li>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 Google. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0432 \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/li>\n<li>\u041f\u0430\u043f\u043a\u0430 \u043d\u0430 Google \u0414\u0438\u0441\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b.<\/li>\n<li>\u0421\u043a\u0440\u0438\u043f\u0442 Google Apps, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443 \u0434\u043b\u044f \u043d\u0430\u0441 (\u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Javascript)<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u043e\u043d\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Google Apps \u043d\u0430 Google \u0414\u0438\u0441\u043a\u0435. \u0412\u0441\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Google Apps, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0412\u0441\u0435 \u043e\u043d\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0432\u0430\u0448\u0435\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0435 Google Apps \u0432 Google Drive. \u0412\u0441\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0421\u043b\u0443\u0436\u0431 Google \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0437\u0430\u0442\u0435\u043c\u043d\u0435\u043d\u043d\u044b\u0439 \u0441 <a href=\"https:\/\/github.com\/miohtama\/obfuscate.js\">obfuscate.js<\/a> )<\/p>\n<p><a href=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.16.03-AM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-2494\" title=\"Screen Shot 2013-01-20 \u0432 10.16.03 AM\" src=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.16.03-AM-1024x345.png\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" srcset=\"https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.16.03-AM-1024x345.png 1024w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.16.03-AM-300x101.png 300w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.16.03-AM-500x168.png 500w\" alt=\"\" width=\"584\" height=\"196\" \/><\/a><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 (\u0437\u0430\u0442\u0435\u043c\u043d\u0435\u043d\u043d\u044b\u0439 \u0441 <a href=\"https:\/\/github.com\/miohtama\/obfuscate.js\">obfuscate.js<\/a> ). \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430, \u043d\u0435\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435.<\/p>\n<p><a href=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.16-AM.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2495 alignnone\" title=\"Screen Shot 2013-01-20 \u0432 10.21.16 AM\" src=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.16-AM-1024x728.png\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" srcset=\"https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.16-AM-1024x728.png 1024w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.16-AM-300x213.png 300w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.16-AM-421x300.png 421w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.16-AM.png 1026w\" alt=\"\" width=\"584\" height=\"415\" \/><\/a><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 &#8211; \u043c\u0435\u0442\u043a\u0438 , \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0436\u0438\u0440\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c (\u0437\u0430\u0442\u0435\u043c\u043d\u0435\u043d\u043d\u044b\u0439 \u0441 <a href=\"https:\/\/github.com\/miohtama\/obfuscate.js\">obfuscate.js<\/a> )<\/p>\n<p><a href=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.58-AM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2496\" title=\"Screen Shot 2013-01-20 \u0432 10.21.58 AM\" src=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.58-AM.png\" sizes=\"auto, (max-width: 1002px) 100vw, 1002px\" srcset=\"https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.58-AM.png 1002w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.58-AM-300x261.png 300w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.21.58-AM-343x300.png 343w\" alt=\"\" width=\"1002\" height=\"874\" \/><\/a><\/p>\n<h2 id=\"Short_introduction_to_Google_Apps_Script\">2. \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 Google Apps Script<\/h2>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442\u044b Google Apps \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438<\/p>\n<ul>\n<li>\u0421 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Google Driver (\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 &#8230; \u0434\u0430\u043b\u0435\u0435 &#8230; \u0441\u043a\u0440\u0438\u043f\u0442)<\/li>\n<li>\u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Google Apps (\u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043c\u0435\u043d\u044e)<\/li>\n<li><a href=\"https:\/\/developers.google.com\/apps-script\/execution_methods\">\u0418 \u0431\u043e\u043b\u0435\u0435<\/a><\/li>\n<li>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 <a href=\"https:\/\/developers.google.com\/apps-script\/publishing_gallery\">\u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043d\u0438\u043f\u043f\u0435\u0442 \u043e\u0431\u043c\u0435\u043d \u0441\u0435\u0440\u0432\u0438\u0441<\/a> \u0432 Google Spreadsheet &#8230; \u0445\u043e\u0442\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0437\u0434\u0435\u0441\u044c. \u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/developers.google.com\/apps-script\/publishing_chrome_web_store\">\u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432 Google Chrome Web Store<\/a> .<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0436\u043d\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p><a href=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.42.26-AM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2497\" title=\"Screen Shot 2013-01-20 \u0432 10.42.26 AM\" src=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.42.26-AM-300x77.png\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" srcset=\"https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.42.26-AM-300x77.png 300w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.42.26-AM-500x129.png 500w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.42.26-AM.png 596w\" alt=\"\" width=\"300\" height=\"77\" \/><\/a><\/p>\n<p><a href=\"https:\/\/script.google.com\/\">\u0421\u043a\u0440\u0438\u043f\u0442\u00a0<\/a> Google\u00a0 apps- \u044d\u0442\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 JavaScript (\u0432\u0435\u0440\u0441\u0438\u044f ECMAScript \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430? \u0417\u0430\u043f\u0443\u0449\u0435\u043d \u043b\u0438 V8?), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0447 \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 Google \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0441\u043b\u0443\u0436\u0431\u0430\u0445. \u0421\u043a\u0440\u0438\u043f\u0442\u00a0 Google apps \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <a href=\"https:\/\/developers.google.com\/apps-script\/defaultservices\">\u043e\u0431\u0448\u0438\u0440\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e API<\/a> \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 <a href=\"https:\/\/developers.google.com\/apps-script\/articles\">\u0443\u0447\u0435\u0431\u043d\u044b\u043c\u0438 \u043f\u043e\u0441\u043e\u0431\u0438\u044f\u043c\u0438<\/a>, \u043d\u043e \u043e\u043d\u0438 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u043a\u0430\u043a \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0421\u043a\u0440\u0438\u043f\u0442\u044b Google Apps \u043c\u043e\u0433\u0443\u0442 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u041a\u0430\u0440\u0442\u0430\u043c Google, \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c, \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u0435, \u0441\u0430\u0439\u0442\u0430\u043c, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0434\u043e\u043c\u0435\u043d\u0430 Google Apps \u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u043c\u0435\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 Google.<\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043c\u043e\u0434\u043d\u044b\u0439 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p><a href=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.47.49-AM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2498\" title=\"Screen Shot 2013-01-20 \u0432 10.47.49 AM\" src=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.47.49-AM-300x203.png\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" srcset=\"https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.47.49-AM-300x203.png 300w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.47.49-AM-1024x694.png 1024w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.47.49-AM-442x300.png 442w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.47.49-AM.png 1254w\" alt=\"\" width=\"300\" height=\"203\" \/><\/a><\/p>\n<p>\u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u044f \u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0448\u0430\u0433 \u043d\u0430\u0437\u0430\u0434 \u043a 90-\u043c \u0433\u043e\u0434\u0430\u043c, \u043a \u0441\u0440\u0435\u0434\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 Visual Basic. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Google Apps \u0445\u043e\u0442\u0435\u043b\u0438 \u044d\u0442\u043e\u0433\u043e &#8230; \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Visual Basic \u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0434\u043e\u043c\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0437-\u0437\u0430 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, Javascript \u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0444\u043e\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 Firebug \/ Web Inspector, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0441\u043e\u043b\u0438. \u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 Javascript, \u0445\u043e\u0442\u044f, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0438 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0436\u0430\u043b\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442, \u043d\u043e \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u044d\u0442\u0438\u043c:<\/p>\n<ul>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u043e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0430\u044f \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435<\/li>\n<li>\u0423 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0438\u0434\u0436\u0435\u0442 \u0432\u044b\u0431\u043e\u0440\u0430. \u042d\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0438\u0433\u0440\u0443\u0448\u043a\u043e\u0439.<\/li>\n<li>\u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a (\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u0438), \u043f\u043e\u0445\u043e\u0436\u0435, \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0438 \u0442. \u0414.),<\/li>\n<li>\u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 (\u0442\u0443\u0434\u0430-\u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c Google, \u043d\u0435\u043c\u043d\u043e\u0433\u043e), \u0445\u043e\u0442\u044f \u0432\u0441\u0435 \u0435\u0449\u0435 \u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439<\/li>\n<li>\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0432 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 (\u0441\u043c. \u041d\u0438\u0436\u0435)<\/li>\n<li>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b API \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0435 \u0435\u0449\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e)<\/li>\n<\/ul>\n<p>\u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438<\/p>\n<p><a href=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.58.00-AM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2499\" title=\"Screen Shot 2013-01-20 \u0432 10.58.00 AM\" src=\"http:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.58.00-AM-300x227.png\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" srcset=\"https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.58.00-AM-300x227.png 300w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.58.00-AM-1024x776.png 1024w, https:\/\/opensourcehacker.com\/wp-content\/uploads\/2013\/01\/Screen-Shot-2013-01-20-at-10.58.00-AM-395x300.png 395w\" alt=\"\" width=\"300\" height=\"227\" \/><\/a><\/p>\n<p>\u0412\u0441\u0435 \u043c\u043e\u0433\u043b\u043e \u0431\u044b\u0442\u044c \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u044f \u0438\u0441\u043a\u0430\u043b, \u0438 \u044f \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435 \u043f\u043b\u0430\u0447\u0443 \u043d\u0438 \u043a\u043e\u043f\u0435\u0439\u043a\u0438 \u0437\u0430 Google Apps, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u043d\u0435 \u0445\u043e\u0447\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0432 Microsoft Office, \u0435\u0441\u043b\u0438 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438 &#8230; \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b Google &#8211; \u044d\u0442\u043e \u0438\u0433\u0440\u0443\u0448\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u0442\u044f\u0436\u0435\u043b\u043e\u043c\u0443 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0430\u0432\u0442\u043e\u0440\u0438\u043d\u0433\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f &#8230;. \u0418\u043b\u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 &#8230; \u0433\u0434\u0435 Keynote &#8211; \u043a\u043e\u0440\u043e\u043b\u044c.<\/p>\n<h2 id=\"The_generator_script\">3. \u0421\u043a\u0440\u0438\u043f\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/h2>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442, \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0434\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u043c, \u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u0438\u0437\u043b\u0438\u0448\u043d\u0438\u043c. \u0425\u043e\u0442\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043c\u0435\u0442\u043e\u0434\u044b API \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 Google Apps \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 prompt (), \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 &#8230; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c. \u042f \u043e\u043e\u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 &#8230; \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0432 \u043c\u043e\u0435\u0439 \u0436\u0438\u0437\u043d\u0438.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<ul>\n<li>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0437 URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430)<\/li>\n<li>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 (\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0437 URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430)<\/li>\n<li>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/li>\n<li>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0430\u043f\u043a\u0438 \u0434\u043b\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 Google, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u0437 URL-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u0430\u043f\u043a\u0438.<\/li>\n<\/ul>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043b\u043e\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e, \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0435\u0435 \u0437\u0430\u043c\u0435\u043d\u0435 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043c\u0435\u0442\u043a\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 (1-\u044f \u0441\u0442\u0440\u043e\u043a\u0430) \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u042f \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u0438 \u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u043d\u043e \u044f \u043d\u0435 \u0445\u043e\u0442\u0435\u043b \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0433\u043b\u0443\u0431\u0436\u0435 \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u0443\u0434\u0430\u0440 \u043f\u043e GS, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u044e\u0430\u043d\u0441\u044b.<\/p>\n<p>\u0410 \u0437\u0430\u0442\u0435\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 &#8230; \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 (generator.gs):<\/p>\n<pre class=\"prettyprint lang-js\"><span class=\"com\">\/**\r\n\u00a0* Generate Google Docs based on a template document and data incoming from a Google Spreadsheet\r\n\u00a0*\r\n\u00a0* License: MIT\r\n\u00a0*\r\n\u00a0* Copyright 2013 Mikko Ohtamaa, http:\/\/opensourcehacker.com\r\n\u00a0*\/<\/span>\r\n\r\n<span class=\"com\">\/\/ Row number from where to fill in the data (starts as 1 = first row)<\/span>\r\n<span class=\"kwd\">var<\/span><span class=\"pln\"> CUSTOMER_ID <\/span><span class=\"pun\">=<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"com\">\/\/ Google Doc id from the document template<\/span>\r\n<span class=\"com\">\/\/ (Get ids from the URL)<\/span>\r\n<span class=\"kwd\">var<\/span><span class=\"pln\"> SOURCE_TEMPLATE <\/span><span class=\"pun\">=<\/span> <span class=\"str\">\"xxx\"<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"com\">\/\/ In which spreadsheet we have all the customer data<\/span>\r\n<span class=\"kwd\">var<\/span><span class=\"pln\"> CUSTOMER_SPREADSHEET <\/span><span class=\"pun\">=<\/span> <span class=\"str\">\"yyy\"<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"com\">\/\/ In which Google Drive we toss the target documents<\/span>\r\n<span class=\"kwd\">var<\/span><span class=\"pln\"> TARGET_FOLDER <\/span><span class=\"pun\">=<\/span> <span class=\"str\">\"zzz\"<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"com\">\/**\r\n\u00a0* Return spreadsheet row content as JS array.\r\n\u00a0*\r\n\u00a0* Note: We assume the row ends when we encounter\r\n\u00a0* the first empty cell. This might not be \r\n\u00a0* sometimes the desired behavior.\r\n\u00a0*\r\n\u00a0* Rows start at 1, not zero based!!! ?\r\n\u00a0*\r\n\u00a0*\/<\/span>\r\n<span class=\"kwd\">function<\/span><span class=\"pln\"> getRowAsArray<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sheet<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> row<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> dataRange <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> sheet<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getRange<\/span><span class=\"pun\">(<\/span><span class=\"pln\">row<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">99<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> data <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> dataRange<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getValues<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> columns <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">[];<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"kwd\">for<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">i in data<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> row <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> data<\/span><span class=\"pun\">[<\/span><span class=\"pln\">i<\/span><span class=\"pun\">];<\/span><span class=\"pln\">\r\n\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"typ\">Logger<\/span><span class=\"pun\">.<\/span><span class=\"pln\">log<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Got row\"<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> row<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">for<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> l<\/span><span class=\"pun\">=<\/span><span class=\"lit\">0<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> l<\/span><span class=\"pun\">&lt;<\/span><span class=\"lit\">99<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> l<\/span><span class=\"pun\">++)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> col <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> row<\/span><span class=\"pun\">[<\/span><span class=\"pln\">l<\/span><span class=\"pun\">];<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"com\">\/\/ First empty column interrupts<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">if<\/span><span class=\"pun\">(!<\/span><span class=\"pln\">col<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">break<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"pun\">}<\/span><span class=\"pln\">\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 columns<\/span><span class=\"pun\">.<\/span><span class=\"pln\">push<\/span><span class=\"pun\">(<\/span><span class=\"pln\">col<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"pun\">}<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"pun\">}<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"kwd\">return<\/span><span class=\"pln\"> columns<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"pun\">}<\/span>\r\n\r\n<span class=\"com\">\/**\r\n\u00a0* Duplicates a Google Apps doc\r\n\u00a0*\r\n\u00a0* @return a new document with a given name from the orignal\r\n\u00a0*\/<\/span>\r\n<span class=\"kwd\">function<\/span><span class=\"pln\"> createDuplicateDocument<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sourceId<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> name<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> source <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">DocsList<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getFileById<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sourceId<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> newFile <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> source<\/span><span class=\"pun\">.<\/span><span class=\"pln\">makeCopy<\/span><span class=\"pun\">(<\/span><span class=\"pln\">name<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> targetFolder <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">DocsList<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getFolderById<\/span><span class=\"pun\">(<\/span><span class=\"pln\">TARGET_FOLDER<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 newFile<\/span><span class=\"pun\">.<\/span><span class=\"pln\">addToFolder<\/span><span class=\"pun\">(<\/span><span class=\"pln\">targetFolder<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">return<\/span> <span class=\"typ\">DocumentApp<\/span><span class=\"pun\">.<\/span><span class=\"pln\">openById<\/span><span class=\"pun\">(<\/span><span class=\"pln\">newFile<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getId<\/span><span class=\"pun\">());<\/span>\r\n<span class=\"pun\">}<\/span>\r\n\r\n<span class=\"com\">\/**\r\n\u00a0* Search a paragraph in the document and replaces it with the generated text \r\n\u00a0*\/<\/span>\r\n<span class=\"kwd\">function<\/span><span class=\"pln\"> replaceParagraph<\/span><span class=\"pun\">(<\/span><span class=\"pln\">doc<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> keyword<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> newText<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> ps <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> doc<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getParagraphs<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"kwd\">for<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> i<\/span><span class=\"pun\">=<\/span><span class=\"lit\">0<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> i<\/span><span class=\"pun\">&lt;<\/span><span class=\"pln\">ps<\/span><span class=\"pun\">.<\/span><span class=\"pln\">length<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> i<\/span><span class=\"pun\">++)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> p <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> ps<\/span><span class=\"pun\">[<\/span><span class=\"pln\">i<\/span><span class=\"pun\">];<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> text <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> p<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getText<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">if<\/span><span class=\"pun\">(<\/span><span class=\"pln\">text<\/span><span class=\"pun\">.<\/span><span class=\"pln\">indexOf<\/span><span class=\"pun\">(<\/span><span class=\"pln\">keyword<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">&gt;=<\/span> <span class=\"lit\">0<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 p<\/span><span class=\"pun\">.<\/span><span class=\"pln\">setText<\/span><span class=\"pun\">(<\/span><span class=\"pln\">newText<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 p<\/span><span class=\"pun\">.<\/span><span class=\"pln\">setBold<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">false<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0 <\/span><span class=\"pun\">}<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"pun\">}<\/span> \r\n<span class=\"pun\">}<\/span>\r\n\r\n<span class=\"com\">\/**\r\n\u00a0* Script entry point\r\n\u00a0*\/<\/span>\r\n<span class=\"kwd\">function<\/span><span class=\"pln\"> generateCustomerContract<\/span><span class=\"pun\">()<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> data <\/span><span class=\"pun\">=<\/span> <span class=\"typ\">SpreadsheetApp<\/span><span class=\"pun\">.<\/span><span class=\"pln\">openById<\/span><span class=\"pun\">(<\/span><span class=\"pln\">CUSTOMER_SPREADSHEET<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"com\">\/\/ XXX: Cannot be accessed when run in the script editor?<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"com\">\/\/ WHYYYYYYYYY? Asking one number, too complex?<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"com\">\/\/var CUSTOMER_ID = Browser.inputBox(\"Enter customer number in the spreadsheet\", Browser.Buttons.OK_CANCEL);<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"kwd\">if<\/span><span class=\"pun\">(!<\/span><span class=\"pln\">CUSTOMER_ID<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">return<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> \r\n\u00a0 <\/span><span class=\"pun\">}<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"com\">\/\/ Fetch variable names<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"com\">\/\/ they are column names in the spreadsheet<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> sheet <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> data<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getSheets<\/span><span class=\"pun\">()[<\/span><span class=\"lit\">0<\/span><span class=\"pun\">];<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> columns <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> getRowAsArray<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sheet<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">1<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"typ\">Logger<\/span><span class=\"pun\">.<\/span><span class=\"pln\">log<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Processing columns:\"<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> columns<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> customerData <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> getRowAsArray<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sheet<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> CUSTOMER_ID<\/span><span class=\"pun\">);<\/span><span class=\"pln\"> \u00a0\r\n\u00a0 <\/span><span class=\"typ\">Logger<\/span><span class=\"pun\">.<\/span><span class=\"pln\">log<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Processing data:\"<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> customerData<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"com\">\/\/ Assume first column holds the name of the customer<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> customerName <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> customerData<\/span><span class=\"pun\">[<\/span><span class=\"lit\">0<\/span><span class=\"pun\">];<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> target <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> createDuplicateDocument<\/span><span class=\"pun\">(<\/span><span class=\"pln\">SOURCE_TEMPLATE<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> customerName <\/span><span class=\"pun\">+<\/span> <span class=\"str\">\" agreement\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"typ\">Logger<\/span><span class=\"pun\">.<\/span><span class=\"pln\">log<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Created new document:\"<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> target<\/span><span class=\"pun\">.<\/span><span class=\"pln\">getId<\/span><span class=\"pun\">());<\/span><span class=\"pln\">\r\n\r\n\u00a0 <\/span><span class=\"kwd\">for<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> i<\/span><span class=\"pun\">=<\/span><span class=\"lit\">0<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> i<\/span><span class=\"pun\">&lt;<\/span><span class=\"pln\">columns<\/span><span class=\"pun\">.<\/span><span class=\"pln\">length<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> i<\/span><span class=\"pun\">++)<\/span> <span class=\"pun\">{<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> key <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> columns<\/span><span class=\"pun\">[<\/span><span class=\"pln\">i<\/span><span class=\"pun\">]<\/span> <span class=\"pun\">+<\/span> <span class=\"str\">\":\"<\/span><span class=\"pun\">;<\/span><span class=\"pln\"> \r\n\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"com\">\/\/ We don't replace the whole text, but leave the template text as a label<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> text <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> customerData<\/span><span class=\"pun\">[<\/span><span class=\"pln\">i<\/span><span class=\"pun\">]<\/span> <span class=\"pun\">||<\/span> <span class=\"str\">\"\"<\/span><span class=\"pun\">;<\/span> <span class=\"com\">\/\/ No Javascript undefined<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span class=\"kwd\">var<\/span><span class=\"pln\"> value <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> key <\/span><span class=\"pun\">+<\/span> <span class=\"str\">\" \"<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> text<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 replaceParagraph<\/span><span class=\"pun\">(<\/span><span class=\"pln\">target<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> key<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> value<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\u00a0 <\/span><span class=\"pun\">}<\/span>\r\n\r\n<span class=\"pun\">}<\/span><\/pre>\n<pre class=\"prettyprint lang-js\"><span class=\"com\">\u00a0<\/span><\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Original version: https:\/\/opensourcehacker.com\/2013\/01\/21\/script-for-generating-google-documents-from-google-spreadsheet-data-source\/ \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 1. \u0418\u043d\u0433\u0440\u0435\u0434\u0438\u0435\u043d\u0442\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 2. \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 Google Apps Script 3. \u0421\u043a\u0440\u0438\u043f\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 Microsoft Office \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u00ab\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440. \u041f\u0438\u0441\u044c\u043c\u0430, \u0441\u0447\u0435\u0442\u0430-\u0444\u0430\u043a\u0442\u0443\u0440\u044b, \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0435 \u043d\u0430\u043a\u043b\u0435\u0439\u043a\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 Microsoft Word \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 Microsoft Excel. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043c\u0430\u043b\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \u0438 \u0443 Office \u0435\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/sci-tech-blog.com\/?p=57\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 Google \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Google&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-57","post","type-post","status-publish","format-standard","hentry","category-translation-into-russian"],"_links":{"self":[{"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=\/wp\/v2\/posts\/57","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=57"}],"version-history":[{"count":3,"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=\/wp\/v2\/posts\/57\/revisions"}],"predecessor-version":[{"id":60,"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=\/wp\/v2\/posts\/57\/revisions\/60"}],"wp:attachment":[{"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sci-tech-blog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}