<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https://mediawiki.zina.run/index.php?action=history&amp;feed=atom&amp;title=Google_Apps_Script</id>
	<title>Google Apps Script - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zina.run/index.php?action=history&amp;feed=atom&amp;title=Google_Apps_Script"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zina.run/index.php?title=Google_Apps_Script&amp;action=history"/>
	<updated>2026-10-12T11:40:59Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://mediawiki.zina.run/index.php?title=Google_Apps_Script&amp;diff=781&amp;oldid=prev</id>
		<title>&gt;Zina: /* Вывод значения переменной в лог */</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zina.run/index.php?title=Google_Apps_Script&amp;diff=781&amp;oldid=prev"/>
		<updated>2022-09-06T07:41:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Вывод значения переменной в лог&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;* Ограничения: [https://developers.google.com/apps-script/guides/services/quotas#note1 Quotas for Google Services]&lt;br /&gt;
&lt;br /&gt;
== Наши скрипты ==&lt;br /&gt;
&lt;br /&gt;
* [[GAS — Оплаты клиентов]] — импорт выписок из разных банков и из Google Form&lt;br /&gt;
* [[GAS — Генератор документов]]&lt;br /&gt;
* [[Google Forms Email Sender]] — отправка e-mail уведомлений из Google Forms.&amp;lt;br&amp;gt;Можно использовать для красивых уведомлений из брифов и т.п. наскоро сделанных анкет,&amp;lt;br&amp;gt;а также для замены почтовых форм сайта - см. [[Форма обратной связи на основе Google Forms]]&lt;br /&gt;
&lt;br /&gt;
== Горячие клавиши редактора Google Apps Script ==&lt;br /&gt;
&lt;br /&gt;
https://www.benlcollins.com/apps-script/google-apps-script-ide/&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Auto-complete Google stuff || &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Space&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Auto-complete your own variables || &amp;lt;kbd&amp;gt;Alt&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Run selected function || &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;R&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| View log of run || &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Enter&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| (With auto-indent on)&amp;lt;br&amp;gt;indent all code correctly || &amp;lt;kbd&amp;gt;Tab&amp;lt;/kbd&amp;gt; (works on selected text)&lt;br /&gt;
|-&lt;br /&gt;
| Comment/uncomment || &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;/&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Отладка скрипта ==&lt;br /&gt;
&lt;br /&gt;
=== Вывод значения переменной в лог ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  Logger.log(&amp;quot;variableName: &amp;quot; + variableName);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем нажать &amp;lt;code&amp;gt;Выполнить&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Остановка скрипта в произвольном месте ===&lt;br /&gt;
&lt;br /&gt;
 return;&lt;br /&gt;
&lt;br /&gt;
== Наши сниппеты ==&lt;br /&gt;
&lt;br /&gt;
=== Показать в Logs номер активной строки в таблице ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function getActiveRowInfo() {&lt;br /&gt;
  var ss = SpreadsheetApp.getActiveSpreadsheet();&lt;br /&gt;
  var activeRow = ss.getActiveCell().getRow();&lt;br /&gt;
  Logger.log(&amp;quot;activeRow: &amp;quot; + activeRow);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Дата на украинском и русском ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function testMoment() {&lt;br /&gt;
  eval(UrlFetchApp.fetch(&amp;#039;https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js&amp;#039;).getContentText());&lt;br /&gt;
  eval(UrlFetchApp.fetch(&amp;#039;https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/locale/uk.js&amp;#039;).getContentText());&lt;br /&gt;
  // eval(UrlFetchApp.fetch(&amp;#039;https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/locale/ru.js&amp;#039;).getContentText());&lt;br /&gt;
  var date = moment().format(&amp;#039;LL&amp;#039;);&lt;br /&gt;
  var momentLocale = moment.locale();&lt;br /&gt;
  Logger.log(date);&lt;br /&gt;
  Logger.log(momentLocale);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доступные в CDN библиотеки: https://cdnjs.com/libraries/moment.js/&lt;br /&gt;
&lt;br /&gt;
=== Очистка всех highlight в тексте ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function clearHighLight() {&lt;br /&gt;
  var bgcolor = &amp;#039;#ffffff&amp;#039;; //white&lt;br /&gt;
  var doc = DocumentApp.getActiveDocument();&lt;br /&gt;
  var rangeBuilder = doc.newRange();&lt;br /&gt;
  var body = doc.getBody();&lt;br /&gt;
  var numCh = body.getNumChildren();&lt;br /&gt;
  for (var i=0; i&amp;lt;numCh; i++) {&lt;br /&gt;
    var child = body.getChild(i); //collect all range elements&lt;br /&gt;
    var all = rangeBuilder.addElement(child);&lt;br /&gt;
  }&lt;br /&gt;
  doc.setSelection(all);&lt;br /&gt;
  var selectedElements = all.getRangeElements();&lt;br /&gt;
  for (var i=0; i&amp;lt;selectedElements.length; i++) {&lt;br /&gt;
    var selElem = selectedElements[i];&lt;br /&gt;
    var el = selElem.getElement();&lt;br /&gt;
    var isPartial = selElem.isPartial();&lt;br /&gt;
    if (isPartial) {&lt;br /&gt;
      var selStart = selElem.getStartOffset();&lt;br /&gt;
      var selEnd = selElem.getEndOffsetInclusive();&lt;br /&gt;
      el.asText().setBackgroundColor(selStart, selEnd, bgcolor)      &lt;br /&gt;
    } else {&lt;br /&gt;
      var selStart = selElem.getStartOffset();&lt;br /&gt;
      var selEnd = selElem.getEndOffsetInclusive();&lt;br /&gt;
      el.asText().setBackgroundColor(bgcolor);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  var rg = doc.newRange();&lt;br /&gt;
  rg.addElement(body.getChild(0)); //child zero normally has nothing in it&lt;br /&gt;
  doc.setSelection(rg.build());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function getDocAsHtml(docId){ &lt;br /&gt;
  var url = &amp;#039;https://docs.google.com/feeds/download/documents/Export?exportFormat=html&amp;amp;format=html&amp;amp;id=&amp;#039;;&lt;br /&gt;
  return UrlFetchApp.fetch(url+docId).getContentText();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Приведенный код заполняет левую верхнюю ячейку первого листа активной таблицы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var ss = SpreadsheetApp.getActiveSpreadsheet();    &lt;br /&gt;
var sheet = ss.getSheets()[0];&lt;br /&gt;
sheet.getRange(&amp;quot;A1&amp;quot;).setValue(&amp;quot;Содержимое ячейки&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А этот код создает копию текстового документа и кладет его в определенное место:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var source = DocsList.getFileById(&amp;quot;SOURCE_ID&amp;quot;);&lt;br /&gt;
var newFile = source.makeCopy(&amp;quot;новое имя файла&amp;quot;);&lt;br /&gt;
var targetFolder = DocsList.getFolderById(&amp;quot;ID папки, в которой будет размещен свежесозданный файл&amp;quot;);&lt;br /&gt;
newFile.addToFolder(targetFolder);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А вот так можно провести замену строк в текстовом документе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var doc = DocumentApp.openById(&amp;quot;ID редактируемого документа&amp;quot;);&lt;br /&gt;
doc.editAsText().replaceText(&amp;quot;старый текст&amp;quot;, &amp;quot;новый текст&amp;quot;);&lt;br /&gt;
Logger.log(doc.getText())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующий пример кода подсвечивает определенные слова в тексте:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var doc = DocumentApp.openById(&amp;#039;id документа&amp;#039;);&lt;br /&gt;
var textToHighlight = &amp;#039;текст для подсветки&amp;#039;;&lt;br /&gt;
var highlightStyle = {};&lt;br /&gt;
highlightStyle[DocumentApp.Attribute.FOREGROUND_COLOR] = &amp;#039;#FF0000&amp;#039;;&lt;br /&gt;
var paras = doc.getParagraphs();&lt;br /&gt;
var textLocation = {}; &lt;br /&gt;
for (i=0; i&amp;lt;paras.length; ++i)&lt;br /&gt;
{&lt;br /&gt;
    textLocation = paras[i].findText(textToHighlight);&lt;br /&gt;
    if (textLocation != null &amp;amp;&amp;amp; textLocation.getStartOffset() != -1)&lt;br /&gt;
    {&lt;br /&gt;
        textLocation.getElement().setAttributes(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive(), highlightStyle);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Работа с Google Translate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var word = LanguageApp.translate(&amp;#039;кукушка&amp;#039;, &amp;#039;ru&amp;#039;, &amp;#039;es&amp;#039;);&lt;br /&gt;
Logger.log(word);&lt;br /&gt;
// Скрипт выведет в консоль &amp;quot;cuco&amp;quot; — кукушка по-испански&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Google Contacts: Приведенный ниже код копирует все контакты из группы «Редакция» в лист Google Spread Sheet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var group = ContactsApp.getContactGroup(&amp;quot;Редакция&amp;quot;);&lt;br /&gt;
var contacts = group.getContacts();&lt;br /&gt;
var ss = SpreadsheetApp.getActiveSpreadsheet();&lt;br /&gt;
var sheet = ss.getSheetByName(&amp;quot;Контакты редакции&amp;quot;);&lt;br /&gt;
for (var i in contacts) {&lt;br /&gt;
 // Сохраняем данные о контактах в ячейки: имя, фамилия, номер телефона&lt;br /&gt;
 sheet.getRange(i, 1, 1, 1).setValue(contacts[i].getGivenName());&lt;br /&gt;
 sheet.getRange(i, 2, 1, 1).setValue(contacts[i].getFamilyName()); &lt;br /&gt;
 sheet.getRange(i, 3, 1, 1).setValue(contacts[i].getPhones());     &lt;br /&gt;
// И еще есть метод для получения номера пейджера (!) контакта&lt;br /&gt;
 sheet.getRange(i, 4, 1, 1).setValue(contacts[i].getPager());     &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Работа с календарем: Создавать события в календаре тоже можно автоматически (и так же, как в случае с рассылкой, формировать информацию о них из строк таблицы). Код для создания события:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var timeZone = CalendarApp.getTimeZone();&lt;br /&gt;
var description = Utilities.formatString( &amp;#039;%s from %s to %s&amp;#039;, &amp;quot;заголовок события&amp;quot;, dateString_( &amp;quot;дата начала события&amp;quot;, &amp;quot;часовой пояс&amp;quot; ), dateString_(&amp;quot;дата конца события&amp;quot;, &amp;quot;часовой пояс&amp;quot; ));&lt;br /&gt;
CalendarApp.createEventFromDescription(description);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [https://excelpedia.ru/bez-rubriki/resursi-google-sheets-apps-script-data-studio Ресурсы Google Sheets, Apps Script и Data Studio]&lt;br /&gt;
* [https://github.com/gsuitedevs/apps-script-samples GitHub-репозиторий с Google Apps скриптами]&lt;br /&gt;
* [https://xakep.ru/2015/01/08/google-apps-script/#toc18. Пишем скрипты для автоматизации работы с приложениями Google]&lt;br /&gt;
* [https://www.practicalecommerce.com/create-google-docs-google-sheet Create Google Docs from a Google Sheet]&lt;br /&gt;
* [https://ignatov-script.blogspot.com/2017/11/google.html Генерируем документы в google из шаблона]&lt;br /&gt;
* [https://railsware.com/blog/google-apps-script-gotchas-to-develop-an-add%E2%80%91on/ Google Apps Script Tips to build Add&amp;amp;#45;ons]&lt;br /&gt;
* [https://yagisanatode.com/2018/04/15/google-apps-script-how-to-create-javascript-and-css-files-for-a-sidebar-project-in-google-apps-script/ Google Apps Script &amp;amp;#45; How to create Javascript and CSS files for a Sidebar Project in Google Apps Script]&lt;br /&gt;
&lt;br /&gt;
=== [https://www.youtube.com/playlist?list=PLv9Pf9aNgemv62NNC5bXLR0CzeaIj5bcw Google Sheets Scripts &amp;amp;#45; YouTube] ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=AUM6s-hbX6w Google Sheets &amp;amp;#45; Drop Down List, 2 Dependent Dropdown Lists &amp;amp;#45; YouTube]&lt;br /&gt;
* [https://www.youtube.com/watch?v=nLW8SerwnJo QUERY &amp;amp;#45; Drop Down List to Filter Data &amp;amp;#45; Google Sheets &amp;amp;#45; YouTube]&lt;br /&gt;
&lt;br /&gt;
=== [https://drive.google.com/drive/folders/1BNiXoTjkIPkYqW-xxRTtWSP3tVkcDi2O Тренировочные скрипты] ===&lt;br /&gt;
&lt;br /&gt;
* Google Forms - Drop Down List from Spreadsheet&lt;br /&gt;
** [https://www.youtube.com/watch?v=o3AL7ASI_cA Видео руководство]&lt;br /&gt;
** [https://drive.google.com/drive/folders/1zWWvCjfFU3VXFl3fGQEXtj5u221G6jJF Папка со скриптами]&lt;br /&gt;
* User form in Google Sheets using Apps Script and Materialize CSS&lt;br /&gt;
** [https://www.youtube.com/watch?v=PsIuSwSj3CM Видео руководство]&lt;br /&gt;
** [https://drive.google.com/drive/folders/1es1O1fsJFc4LHtzkB4FXvVWQUvn4dIZW Папка со скриптами]&lt;br /&gt;
&lt;br /&gt;
=== Склонение ФИО ===&lt;br /&gt;
&lt;br /&gt;
* [https://petrovich.nlpub.ru/ Petrovich] - корректно склоняет украинские имена&lt;br /&gt;
** [https://github.com/deNULL/petrovich-js Портированная на JavaScript версия библиотеки для склонения имен]&lt;br /&gt;
* [https://github.com/nodkz/lvovich Lvovich] - доработанная версия Петровича ([https://github.com/nodkz/lvovich Live Demo])&lt;br /&gt;
** склонения названий городов (работает для большинства составных названий: Санкт-Петербург, Ростов-на-Дону и пр.)&lt;br /&gt;
** определения пола по имени фамилии и отчеству&lt;br /&gt;
** склонения падежей русских имен, фамилий и отчеств&lt;br /&gt;
* [http://morpher.ru/ws3/ Веб&amp;amp;#45;сервис склонения по падежам «Морфер»]&lt;br /&gt;
** [https://www.elma-bpm.ru/KB/article-6240.html Автоматическое склонение слов с использованием внешнего сервиса «Морфер»]&lt;br /&gt;
* [https://github.com/nodkz/lvovich GitHub &amp;amp;#45; nodkz/lvovich&amp;amp;#58; Склонение названий городов, определения пола по ФИО, склонения имен по падежам]&lt;br /&gt;
&lt;br /&gt;
=== Форматирование даты на украинском ===&lt;br /&gt;
&lt;br /&gt;
* https://momentjs.com/&lt;br /&gt;
* [https://stackoverflow.com/questions/22410210/how-do-i-use-momentsjs-in-google-apps-script How do I use momentsjs in Google Apps Script?]&lt;br /&gt;
* [https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html SimpleDateFormat]&lt;/div&gt;</summary>
		<author><name>&gt;Zina</name></author>
	</entry>
</feed>