Меню

Google Apps Script При сведении таблиц теряется время из даты



Синхронизация Гугл Таблицы с Гугл Календарем

Анатолий Опарин / март, 2019

У офисных работников, работающих с Таблицами и Календарем на платформе Google Disk рано или поздно возникает насущная потребность синхронизировать эти два сервиса. Ниже в виде инструкции (а еще ниже в виде инфографики) дается типичный вариант такого решения.

Задача: Есть Гугл Таблица с днями рождения партнеров. Надо сделать так, чтобы мы могли автоматически в Гугл Календаре иметь напоминания об этих днях рождения с извещением на электронную почту владельца Календаря, т.е. на наш e-mail.

Решение: 1) Создаем таблицу дней рождения в Гугл Таблицах; 2) Пишем скрипт на языке Google Apps Script, который считывает таблицу и ретранслирует ее строки в Гугл Календарь в виде напоминаний; 3) Рисуем кнопку в интерфейсе Таблиц и задаем ей связь со скриптом; 4) Запускаем скрипт этой кнопкой.

СОЗДАЕМ ТАБЛИЦУ

ПИШЕМ СКРИПТ

Сохранить код по кнопке [Save] (изображение дискеты).
Код можно просто методом копирования перенести в редактор.
Некоторые пояснения:

  • В первой строке фигурирует имя функции – DR – его можно изменить на другое. Его нужно запомнить, пригодится ниже.
  • Создается новый календарь с именем «Личный_календарь».
  • Если календарь с таким именем уже был, то он очищается от всех напоминаний с начала 2019 года по 2030 год.
  • Согласно расписанию дней рождения в Таблице на дни, даты которых фигурируют в третьем столбце, в «Личный_Календарь» выставляются напоминания с email-уведомлением.

Желтым в коде подсвечены те участки, которые должны будут подвергнуться ревизии при изменении формата таблицы, заложенного в постановке задачи:

i = 1 Единица соответствует второй строке, т.к. в программировании счет начинается с нуля. Т.е., если у вас заголовок будет занимать две строки, то 1 надо будет заменить на 2. data[i][0] Это имя. data[i][1] Это фамилия. data[i][2] Это дата рождения. Т.е., если вы изменяете формат и вводите вторым столбцом отчество, сдвигая фамилию и дату вправо, то в коде на месте data[i][2] должно стоять data[i][3], а отчество в виде data[i][1] вставьте после имени, а именно data[i][0] замените на data[i][0]+” ”+data[i][1]. И прежнюю переменную data[i][1], отвечавшую за фамилию, измените на data[i][2].

Таким образом, актуализировать расписание Календаря можно в любое время нажатием на кнопку [ДР]. Прежнее содержание календаря «Личный_Календарь» будет полностью заменяться на расписание, которое присутствует в Таблице.

РИСУЕМ КНОПКУ ДЛЯ СКРИПТА

Для запуска скрипта из интерфейса Таблицы в ней создадим кнопку:

  1. В меню выбрать: Insert > Drawing.
  2. Выбрать инструмент Shape.
  3. Нарисовать фигуру, которая вам нравится. Можно задать на фигуре текст, например, «ДР».
  4. Сохранить по кнопке [Save and Close].
  5. В Таблице на появившейся кнопке нажать на три вертикальные точки – это меню кнопки.
  6. Выбрать пункт Assign Script.
  7. Выбрать имя функции «DR» (без кавычек и без скобок)
  8. Сохранить [Ok].

Теперь связь кнопки и скрипта организована.
Потом, при желании изменить имя функции у кнопки, или отредактировать ее дизайн, или удалить, надо нажать на эту кнопку правой кнопкой мыши, чтобы увидеть заветные три вертикальные точки.

ЗАПУСКАЕМ СКРИПТ

  1. Нажать на созданную кнопку [ДР].
  2. Если это первый запуск, то Google запросит разрешение на выполнения скрипта. Дать это согласие.
  3. После выполнения скрипта зайти в Google Календарь.
  4. Увидеть слева «Личный_Календарь» в списке календарей. Но назначенных событий пока не видно в ячейках дней.
  5. Переключить галочку «Личный_Календарь» в списке календарей. События появятся.

P.S. Можно также вместо кнопки вынести запуск функции скрипта в верхнее меню.

ИНФОГРАФИКА

Специально для визуалов ниже изображено то, что написано выше:

Гугл: Таблицы-Календарь синхронизация: Инфографика

ВАРИАНТЫ ВЫЗОВА ФУНКЦИИ

Скрипт состоит из функций, часто независимых друг от друга. Вызвать функцию на исполнение можно из другой функции, а также независимо, и Гугл предоставляет 4 варианта такого независимого вызова:

Источник

[Google Apps Script] При сведении таблиц теряется время из даты

19 мая 2019 г., 9:52:37 -> 19 мая 2019 г., 9:52:37

2020-05-18 12:33:51 превратилось в 18.05.2020

Помощь в написании контрольных, курсовых и дипломных работ здесь.

[Google Apps Script] Скрипты не работают при копировании.
Google Apps Script не работают при копировании. Перекинул из одного проекта и таблицы и сами.

Google apps script
Подскажите пожалуйста как в гугл таблица сделать выбор диапазона ячеек с определенными датами. .

Читайте также:  Сирия сборная по футболу состав

Аналог ВПР в Google Apps Script?
Всем привет, Не уверен что это правильная ветка форума, но попробую: Есть ли в GAS аналог.

[Google Apps Script] Проверить результат вычислений встроенных функций
Здравствуйте! Я правильно понимаю, что для получения Z нужно в самом окне расписать полученную.

Оригинальная ячейка с датой-временем выглядит так: 2020-05-18 12:33:51
но если по ней кликнуть октрывается date-time picker, а также у даты меняется формат на точки вместо тире, но там время остается:

Как вытащить из такой ячейки дату и время?

Добавлено через 5 минут
допишу еще:
‘hh:mm:ss’ -для времени
‘YYYY-MM-dd’ — для даты

Добавлено через 5 минут

при сведении таблиц получилась каша:

исходное д-время — — — — — — — получилось
2020-05-18T12:33:51+0600 2020-05-18 6:33:51
2020-05-21 6:33:51 2020-05-21 0:33:51

перемещал вот таким способом:

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка с чтением даты google script
Доброй ночи! В таблице находится дата. При чтении таким образом: var curDate =.

Apps script (гугл таблицы) не работает getValues() в цикле
почему-то не работает getValues() в цикле. приходится загонять данные в массив построчно: Например.

Необходимо отнять от текущей даты 3 года, при выполнении действия теряется 1 день, как это исправить
Есть дата, необходимо отнять от текущей даты 3 года, при выполнении действия разности теряется 1.

Google Apps
Интересная штука, можно юзать почту от гугл на своём домене, да ещё и наделать кучу акков. Мне.

Google Apps, Yahoo,Microsoft
У меня тут есть пара вопросиков, на которые я все никак не могу найти ответа. Многие сайты.

How to migrate our data from Google apps to outlook?
I am using Google apps, how to transfer emails from Google apps to PST format for Outlook. Please.

Источник

Скрипт для гугл таблицы время

Есть скрипт, который сохраняет все вводимые значения в любой ячейке первого столбца — во второй столбец.

На данный момент даты сохраняет в формате Гугл.
Нужно, чтобы даты сохранял в формате «дд.мм.гггг»

Помогите, пожалуйста, с реализацией. Спасибо.

P.S. Для темы не придумал название получше.

Есть скрипт, который сохраняет все вводимые значения в любой ячейке первого столбца — во второй столбец.

На данный момент даты сохраняет в формате Гугл.
Нужно, чтобы даты сохранял в формате «дд.мм.гггг»

Помогите, пожалуйста, с реализацией. Спасибо.

P.S. Для темы не придумал название получше. evgenij_vl

Есть скрипт, который сохраняет все вводимые значения в любой ячейке первого столбца — во второй столбец.

На данный момент даты сохраняет в формате Гугл.
Нужно, чтобы даты сохранял в формате «дд.мм.гггг»

Помогите, пожалуйста, с реализацией. Спасибо.

P.S. Для темы не придумал название получше. Автор — evgenij_vl
Дата добавления — 11.05.2017 в 21:57

var idCol = e.range.getColumn();

if ( idCol == 1 ) <
updateHist(e.range);
>
>

//var rngInput = SpreadsheetApp.getActive().getActiveCell();
var valInput = rngInput.getValue();

var rngHist = rngInput.offset(0, 1);
var valHist = rngHist.getValue();

if (isDate(valInput)) <
valAddHist = Utilities.formatDate(valInput, «GMT+3», «dd.MM.yyyy HH:mm:ss»);
> else <
valAddHist = valInput;
>

// (c) ‘https://productforums.google.com/forum/#!topic/docs/lZYtngHrpgU
function isDate(v) <

if (Object.prototype.toString.call(v) === «[object Date]») <
if (isNaN(v.getTime())) <
return false;
> else <
return true;
>
> else <
return false;
>
>

НА ЗАМЕТКУ: Форум пока не дает нормально форматировать текст скрипта, пробельные отступы в начале строк съедаются. Чтобы восстановить отступы надо после копирования кода к себе в Редактор скриптов выделить там скопированный текст (или сразу весь текст редактора — по Ctrl+A) и нажать комбинацию SHIFT+TAB.

var idCol = e.range.getColumn();

if ( idCol == 1 ) <
updateHist(e.range);
>
>

//var rngInput = SpreadsheetApp.getActive().getActiveCell();
var valInput = rngInput.getValue();

var rngHist = rngInput.offset(0, 1);
var valHist = rngHist.getValue();

if (isDate(valInput)) <
valAddHist = Utilities.formatDate(valInput, «GMT+3», «dd.MM.yyyy HH:mm:ss»);
> else <
valAddHist = valInput;
>

// (c) ‘https://productforums.google.com/forum/#!topic/docs/lZYtngHrpgU
function isDate(v) <

if (Object.prototype.toString.call(v) === «[object Date]») <
if (isNaN(v.getTime())) <
return false;
> else <
return true;
>
> else <
return false;
>
>

НА ЗАМЕТКУ: Форум пока не дает нормально форматировать текст скрипта, пробельные отступы в начале строк съедаются. Чтобы восстановить отступы надо после копирования кода к себе в Редактор скриптов выделить там скопированный текст (или сразу весь текст редактора — по Ctrl+A) и нажать комбинацию SHIFT+TAB. Gustav

var idCol = e.range.getColumn();

Читайте также:  Примеры таблиц для прогнозов

if ( idCol == 1 ) <
updateHist(e.range);
>
>

//var rngInput = SpreadsheetApp.getActive().getActiveCell();
var valInput = rngInput.getValue();

var rngHist = rngInput.offset(0, 1);
var valHist = rngHist.getValue();

if (isDate(valInput)) <
valAddHist = Utilities.formatDate(valInput, «GMT+3», «dd.MM.yyyy HH:mm:ss»);
> else <
valAddHist = valInput;
>

// (c) ‘https://productforums.google.com/forum/#!topic/docs/lZYtngHrpgU
function isDate(v) <

if (Object.prototype.toString.call(v) === «[object Date]») <
if (isNaN(v.getTime())) <
return false;
> else <
return true;
>
> else <
return false;
>
>

НА ЗАМЕТКУ: Форум пока не дает нормально форматировать текст скрипта, пробельные отступы в начале строк съедаются. Чтобы восстановить отступы надо после копирования кода к себе в Редактор скриптов выделить там скопированный текст (или сразу весь текст редактора — по Ctrl+A) и нажать комбинацию SHIFT+TAB. Автор — Gustav
Дата добавления — 12.05.2017 в 02:03

Переписал функцию updateHist с учётом того, что редактируемый диапазон e.range может состоять из нескольких ячеек — например, в случае вставки после копирования, когда исходный диапазон также содержит несколько ячеек, или в случае одновременной очистки клавишей Delete нескольких предварительно выделенных ячеек. Естественно, в таких случаях хочется, чтобы история обновлялась для всех измененных ячеек, а не только для первой, как в предыдущей версии функции.

var rngInput = range.offset(0, 0, range.getNumRows(), 1);
var valInput = rngInput.getValues();

var rngHist = rngInput.offset(0, 1);
var valHist = rngHist.getValues();

for (var row in valInput) <
if (isDate(valInput[row][0])) <
var valAddHist = Utilities.formatDate(valInput[row][0], «GMT+3», «dd.MM.yyyy HH:mm:ss»);
> else <
var valAddHist = valInput[row][0];
>
valHist[row][0] += » <" + valAddHist + ">«;
>

К сожалению, не может быть обработан составной диапазон из нескольких ОБЛАСТЕЙ ячеек — в виду отсутствия в Google Script соответствующих функций. Т.е., скажем, ЕСЛИ встать в ячейку A1, скопировать ее по Ctrl+C, выделить мышкой диапазон A9:A10, далее, удерживая Ctrl, выделить мышкой диапазон A3:A4 и далее, отпустив Ctrl и снова ее нажав и удерживая, выделить мышкой диапазон A14:A16, ТО после нажатия Ctrl+V значение ячейки A1 хоть и будет вставлено во все 7 ячеек составного диапазона (A9:A10,A3:A4,A14:A16), но обработка onEdit будет выполнена только для первой области A9:A10 (первой — по порядку выделения мышкой) и, соответственно, история изменений будет обновлена только в ячейках B9:B10.

При очистке клавишей Delete наблюдается аналогичная картина: значения будут удалены из всех ячеек составного диапазона, но история изменится только для области, которая была выделена первой.

Разумеется, пользователи таблицы должны быть проинформированы (на уровне должностных инструкций) об этой особенности поведения составных диапазонов и не использовать их в чувствительных областях таблицы (в данном конкретном случае — в колонке A).

Переписал функцию updateHist с учётом того, что редактируемый диапазон e.range может состоять из нескольких ячеек — например, в случае вставки после копирования, когда исходный диапазон также содержит несколько ячеек, или в случае одновременной очистки клавишей Delete нескольких предварительно выделенных ячеек. Естественно, в таких случаях хочется, чтобы история обновлялась для всех измененных ячеек, а не только для первой, как в предыдущей версии функции.

var rngInput = range.offset(0, 0, range.getNumRows(), 1);
var valInput = rngInput.getValues();

var rngHist = rngInput.offset(0, 1);
var valHist = rngHist.getValues();

for (var row in valInput) <
if (isDate(valInput[row][0])) <
var valAddHist = Utilities.formatDate(valInput[row][0], «GMT+3», «dd.MM.yyyy HH:mm:ss»);
> else <
var valAddHist = valInput[row][0];
>
valHist[row][0] += » <" + valAddHist + ">«;
>

К сожалению, не может быть обработан составной диапазон из нескольких ОБЛАСТЕЙ ячеек — в виду отсутствия в Google Script соответствующих функций. Т.е., скажем, ЕСЛИ встать в ячейку A1, скопировать ее по Ctrl+C, выделить мышкой диапазон A9:A10, далее, удерживая Ctrl, выделить мышкой диапазон A3:A4 и далее, отпустив Ctrl и снова ее нажав и удерживая, выделить мышкой диапазон A14:A16, ТО после нажатия Ctrl+V значение ячейки A1 хоть и будет вставлено во все 7 ячеек составного диапазона (A9:A10,A3:A4,A14:A16), но обработка onEdit будет выполнена только для первой области A9:A10 (первой — по порядку выделения мышкой) и, соответственно, история изменений будет обновлена только в ячейках B9:B10.

При очистке клавишей Delete наблюдается аналогичная картина: значения будут удалены из всех ячеек составного диапазона, но история изменится только для области, которая была выделена первой.

Разумеется, пользователи таблицы должны быть проинформированы (на уровне должностных инструкций) об этой особенности поведения составных диапазонов и не использовать их в чувствительных областях таблицы (в данном конкретном случае — в колонке A). Gustav

Сообщение Переписал функцию updateHist с учётом того, что редактируемый диапазон e.range может состоять из нескольких ячеек — например, в случае вставки после копирования, когда исходный диапазон также содержит несколько ячеек, или в случае одновременной очистки клавишей Delete нескольких предварительно выделенных ячеек. Естественно, в таких случаях хочется, чтобы история обновлялась для всех измененных ячеек, а не только для первой, как в предыдущей версии функции.

Читайте также:  Определи истинность утверждений для каждого дерева заполни таблицу Если окажется что утверждение не имеет смысла для какого то

var rngInput = range.offset(0, 0, range.getNumRows(), 1);
var valInput = rngInput.getValues();

var rngHist = rngInput.offset(0, 1);
var valHist = rngHist.getValues();

for (var row in valInput) <
if (isDate(valInput[row][0])) <
var valAddHist = Utilities.formatDate(valInput[row][0], «GMT+3», «dd.MM.yyyy HH:mm:ss»);
> else <
var valAddHist = valInput[row][0];
>
valHist[row][0] += » <" + valAddHist + ">«;
>

К сожалению, не может быть обработан составной диапазон из нескольких ОБЛАСТЕЙ ячеек — в виду отсутствия в Google Script соответствующих функций. Т.е., скажем, ЕСЛИ встать в ячейку A1, скопировать ее по Ctrl+C, выделить мышкой диапазон A9:A10, далее, удерживая Ctrl, выделить мышкой диапазон A3:A4 и далее, отпустив Ctrl и снова ее нажав и удерживая, выделить мышкой диапазон A14:A16, ТО после нажатия Ctrl+V значение ячейки A1 хоть и будет вставлено во все 7 ячеек составного диапазона (A9:A10,A3:A4,A14:A16), но обработка onEdit будет выполнена только для первой области A9:A10 (первой — по порядку выделения мышкой) и, соответственно, история изменений будет обновлена только в ячейках B9:B10.

При очистке клавишей Delete наблюдается аналогичная картина: значения будут удалены из всех ячеек составного диапазона, но история изменится только для области, которая была выделена первой.

Разумеется, пользователи таблицы должны быть проинформированы (на уровне должностных инструкций) об этой особенности поведения составных диапазонов и не использовать их в чувствительных областях таблицы (в данном конкретном случае — в колонке A). Автор — Gustav
Дата добавления — 13.05.2017 в 19:29

Источник

Как я слежу за акциями в гугл-таблице: три простых способа

Я использую гугл-таблицы для портфеля инвестиций, потому что с ними проще вести учет.

Михаил Шардин кандидат технических наук Профиль автора

Упрощение связано с тем, что можно в автоматическом режиме получать данные о текущих ценах и других параметрах активов, которые публикуются открыто.

Для этого я комбинирую три бесплатных сервиса, которые подтягивают данные с разных бирж с помощью API. В статье расскажу, как настроить их под свои нужды.

Что за АПИ

В большинстве случаев данные с бирж передаются через программный интерфейс, называемый API — application programming interface. Грубо говоря, это инструмент, благодаря которому одна программа начинает говорить на одном языке с другой. В нашем случае мы используем API финансовых бирж для «дружбы» с гугл-таблицами.

API Московской биржи

Для чего. Получить информацию о российских акциях и облигациях.

Как это работает. У Московской биржи есть API, который позволяет видеть любую информацию с российской биржи внутри гугл-таблиц. Например, можно получать имена инструментов, цены закрытий, даты оферт и другие параметры.

Работа этой функции полностью зависит от сервера Московской биржи. Если биржа поменяет формат выдачи, организует какие-то другие режимы торгов или изменит что-то в существующей системе, то для корректной работы формул потребуется их доработка.

Такая выборочная информация с биржи пригодится для разных целей. Можно создать гугл-таблицу, чтобы покупать облигации с хорошей ликвидностью, — об этом я уже рассказывал. А можно следить за параметрами бумаг в собственном портфеле — например, за датами оферт. Это поможет не пропустить важную дату, если хотите принять участие в досрочном погашении.

Еще таблица пригодится, если вас не устраивают существующие сервисы учета — Intelinvest и Investing.com.

В таблице-примере к этой статье я привел несколько полезных параметров ценных бумаг. Вот что она умеет:

  • подтягивать название бумаги по идентификатору — столбец «Названия акций и облигаций»;
  • показывать текущие курсы — столбец «Цены акций и облигаций»;
  • получать даты выплат облигаций — столбец «Даты купона и значения для облигаций»;
  • получать дивиденды — столбец «Даты и значения дивиденда для акций»;
  • видеть возможность досрочного погашения облигаций — столбец «Даты оферт».

Что делать? 30.06.17

Список далеко не полный, ведь на Мосбирже огромное количество параметров, включая срочный рынок и валюты.

Источник