Вопросы с тегами [google-apps-script-menu]

0

голосов
0

ответ
3

Просмотры

Как вставить флажок в данной ячейке, когда один будет удален

Я ищу, чтобы создать сценарий, который заменяет флажки в заданных столбцах, когда они будут удалены. Ниже приводится изображение с изображением моей установки. Я хотел бы это так, когда строка удаляется только столбцы с флажками будут заменены флажками снова. Изображение листа Я ищу, чтобы заменить только меченые столбцы с флажками после удаления. К сожалению, Google Sheets не имеет возможности сохранения проверки данных, когда пользователь удаляет его. Спасибо за помощь.
brendann755
1

голосов
1

ответ
41

Просмотры

Как я могу хранить скопированный элемент документа Google?

Мой код в настоящее время ищет заранее определенный начальный тег в Google документе, и находит соответствующий конечный тег. Положение меток сохраняется в переменной. Затем код проходит через и копирует все элементы между тегами во второй документ Google. Это работает, как ожидалось. Тем не менее, данные, содержащиеся в исходном документе выросла до 100s страниц. Поэтому скрипт поиска для тегов занимает еще несколько секунд, чем ожидалось. Это увеличивает время, необходимое, чтобы найти тег и скопировать элементы между ними. Мое решение это иметь мастер-скрипт, который подхватывает элементы один раз и хранит их в чем-то вроде Firebase или Firestore. Тогда я могу получить доступ к элементам непосредственно из БД. Я попробовал несколько подходов для хранения элементов документа Google. Это, как я получаю элементы. вар элемент = sourceDoc.getChild (J) .copy (); // Получает пункт и т.д. Мои попытки включить. Храните элемент в массиве, а затем перебирать массив - отлично работает в то же время выполнения. Храните элемент в кэше документа - не работает. Попробуйте сохранить элемент в виде кляксы - не знаю, как это сделать правильно. Stringify элемент и сохранить в кэше документа - не работает. Кто-пытался экономить элементы документа Google для использования на более поздний срок?
Jason Allshorn
1

голосов
0

ответ
283

Просмотры

Google Script HMAC выход SHA512 отличается при добавлении «\ п»

Я пытаюсь создать скрипт Google, который генерирует подпись HMAC с помощью SHA512 для проверки подлинности к API. Вот код, я использую: вар SystemTimeMilli = Date.now () вар InputString = ( 'Some Text' + '\ п' + SystemTimeMilli); вар PrivateKey = 'bEDtDJnW0y / Ll4YZitxb + D5sTNnEpQKH67EJRCmQCqN9cvGiB8 + IHzB7HjsOs3mSlxLmu4aiPDRpe9anuWzylw ==' // образец секретный ключ подписи вар = Utilities.base64Encode (Utilities.computeHmacSignature (Utilities.MacAlgorithm.HMAC_SHA_512, InputString, PrivateKey, Utilities.Charset.UTF_8)); Logger.log (подпись); Это создает строку в журнал, но по сравнению с результатами использования веб-основе хэш-генераторы результаты отличаются. Однако, если я использую уаг InputString = ( 'Some Text' + SystemTimeMilli); без \ п результатами, полученными в моем Google Script и на веб-основе матча хэш-генераторов. Таким образом, я предполагаю, что путь Google сценариев обработки новой линии отличается от веб базовых генераторов, но я не могу понять, как заставить их соответствовать или какой из них правильный результат. EDIT Чтобы добавить дополнительную информацию: Давайте говорить SystemTimeMilli = 1234567890123 Когда я вхожу ( 'Some Text' + SystemTimeMilli) в мой сценарий, используя bEDtDJnW0y / Ll4YZitxb + D5sTNnEpQKH67EJRCmQCqN9cvGiB8 + IHzB7HjsOs3mSlxLmu4aiPDRpe9anuWzylw == как PrivateKey я получаю oDVJk38b634G9Ykdqm + hVmSb5C8h6 / СР.5 / XG + MjyddTKygWcoZjWu0DfNGY / JWu5Be41zLDKfEZnuFcACrvs7w == вернулся. Что же, если я ввожу / счет / balance1234567890123 в https://quickhash.com, используя алгоритм SHA-512 (SHA2) в качестве алгоритма и Base64 кодирование в качестве выходного формата. Однако, если я введу (» Some Text»+ '\ п' + SystemTimeMilli) в моем сценарии он возвращает 3sj1jbx1tQ4nc8XOkk3nW8TvG5zvCam2LN51fQWDXOKU5O / 1KBAdzdp + YV + aAdYHWCY2x3jqCfbXKoOmfoD0KA == Но использование / счета / баланс 1234567890123 в quickhash.com возвращает что-то другое. Я попытался целую кучу различных комбинаций, но я никогда не получить тот же результат, как и мой сценарий. Я возникли проблемы с получением мой скрипт для проверки подлинности в API, так что я действительно хочу, чтобы определить, если я получаю правильный HMAC, чтобы начать с.
JayDough
1

голосов
1

ответ
164

Просмотры

проходя несколько аргументов в addCallBackElement Google Script

Есть ли способ, чтобы добавить несколько аргументов в функцию addCallBackElement () в скриптах Google? Я хочу, чтобы передать информацию о том, что пользователь ввел в данном текстовом поле, а также целое число. Могу ли я отправить оба эти? Если нет, то есть ли способ, что я могу видеть то, что пользователь вводит в текстовое поле, фактически не имея функцию обработчика? Спасибо! . Например: вар обработчик кола = 0 переменных = app.createServerHandler ( 'myClickHandler') addCallbackElement (TextBox, количество);
Ethan Goldberg
1

голосов
2

ответ
96

Просмотры

Get value of object field using variables to build the field name

Я использую бесплатный конвертер валют API, как показано в коде: // Освободить Конвертор URL = «https://free.currencyconverterapi.com/api/v5/convert?q=EUR_USD&compact=ultra»; ответ = UrlFetchApp.fetch (URL); rateEURUSD_FCC_JSON = JSON.parse (response.getContentText ()); rateEURUSD_FCC = rateEURPLN_FCC_JSON.EUR_USD; Logger.log ( 'rateEURUSD_FCC =' + rateEURUSD_FCC); И это хорошо работает. Теперь я хочу, чтобы использовать тот же метод, но в функции с Валюта1 и валюте2 как входы. URL = 'https://free.currencyconverterapi.com/api/v5/convert?q='+Currency1+'_'+Currency2+'&compact=ultra'; ответ = UrlFetchApp.fetch (URL); fiatRate_FCC_JSON = JSON.parse (response.getContentText ()); fiatPairName = Object.keys (fiatRate_FCC_JSON); Я могу видеть имя ключа, созданного в объекте, но я не знаю, как получить значение этого элемента (т.е. ключа?). theValue = fiatRate_FCC_JSON.xxxxxxxxxxxxxxxxxxxxx Я думаю, что нужно использовать Валюта1 и валюте2 построить имя поля Я хочу, чтобы получить доступ, но я не знаю, как это сделать. Может кто-нибудь помочь? Да, я пытался, глядя на Google и через инструмент поиска этого форума так, пожалуйста, не направлять меня туда, если это будет ваш единственный вклад. Благодарю. EDIT: Это работало theValue = fiatRate_FCC_JSON [Валюта1 + '_' + валюте2]; Благодаря Tanaike. Может кто-нибудь помочь? Да, я пытался, глядя на Google и через инструмент поиска этого форума так, пожалуйста, не направлять меня туда, если это будет ваш единственный вклад. Благодарю. EDIT: Это работало theValue = fiatRate_FCC_JSON [Валюта1 + '_' + валюте2]; Благодаря Tanaike. Может кто-нибудь помочь? Да, я пытался, глядя на Google и через инструмент поиска этого форума так, пожалуйста, не направлять меня туда, если это будет ваш единственный вклад. Благодарю. EDIT: Это работало theValue = fiatRate_FCC_JSON [Валюта1 + '_' + валюте2]; Благодаря Tanaike.
Rafal2017
1

голосов
1

ответ
348

Просмотры

Использование HtmlService.createHtmlOutputFromFile против HtmlService.createTemplateFromFile

У меня есть проблема с моим Google Apps Script. Мне нужно реагировать дизайн приложение с правым названием на вкладке (обычно объявленный тег). Использование HtmlService.createHtmlOutputFromFile позволяет добавить мета-тег, который делает адаптивный дизайн возможно: шаблон переменного = HtmlService.createHtmlOutputFromFile ( «Index»); template.addMetaTag ( 'видовой экран', 'ширина = ширина устройства, исходная шкала = 1'); Тем не менее, это делает невозможным использование таких функций, как SETTITLE (). Эти функции возможны с HtmlService.createTemplateFromFile: шаблон вар = HtmlService.createTemplateFromFile ( 'Index'); // Создание и возвращать HTML в изолированном режиме IFRAME. вернуться template.evaluate () .setTitle ( 'Web App Window Title') .setSandboxMode (HtmlService.SandboxMode.IFRAME); Также, используя createTemplateFromFile делает следующее возможным в HTML: При попытке это с createHtmlOuputFromFile браузер возвращает ошибку. Мне нужно использовать createHtmlOutputFromFile для адаптивного дизайна, так может кто-нибудь помочь мне с SETTITLE () и т.д.
Sep Keuchenius
1

голосов
0

ответ
68

Просмотры

Есть ли способ, чтобы указать доверенные происхождение для почтовых запросов в веб-приложение Google?

Скажем, я создал Google простыню, чтобы захватить адреса электронной почты пользователя. На моем сайте есть небольшая форма и после нажатия кнопки отправить щелкают и запрос Ajax для веб-приложения Google, который записывает данные в лист обжигают: // Выделим и кэш все поля вар $ входами = $ form.find ( "ввод, выберите кнопку, текстовое поле"); // Сериализация данные в виде вар serializedData = $ form.serialize (); // выпалить запрос запроса = $ .ajax ({URL: https://script.google.com/macros/s/longURLcode/exec, типа: "пост", данные: serializedData}); В сценарии Google теперь использовать doPost (е) или doGet (е), чтобы справиться с любым входящим запросом HTTP. Чтобы разрешить эту работу как знак вверх разрешений механизм для веб-приложения должны быть установлены в (я думаю!?) Выполнить приложение, как: Me ([email protected]) Кто имеет доступ к приложению: Любой, даже анонимное Учитывая все на сайте скрипта Google настроено правильно, это работает как шарм. Так что случилось? Проблема: Любой человек может либо заглянуть в исходный код своего веб-страницы или использовать средства разработки для извлечения URL в веб-приложение Google после нажатия кнопку. Этот URL теперь может теоретически использоваться, чтобы затопить лист с бесчисленными (не определен) записей. Вопросы: 1) Есть ли способ ограничить общепринятую запрос HTTP к определенному происхождению? Я пытался сделать это путем получения доступа к HTTP-заголовки в пределах doPost (), но, кажется, нет никакого способа сделать это. 2) Является ли «Кто имеет доступ к приложению: Любой, даже анонимный» неправильный подход? Я думал, что это необходимо, так как вы можете выбрать только пользователей Google здесь и некоторые URL (mywebsite.com), казалось, попадают в категорию анонимных. 3) Я не думаю, что это возможно, но, может быть, я пропустил один из вариантов: Есть ли способ, чтобы НЕ подвергать Google веб-приложения URL для кого? Я думаю, не потому, что вы можете контролировать любые запросы с Девыми инструментами. 4) Является ли использование листов для сбора такого рода данных просто ужасная идея в целом (частично по указанным выше причинам), и я должен найти другое решение как можно скорее?
Felix
1

голосов
1

ответ
1.7k

Просмотры

Determine correct date format of Google Form response

Что является лучшим способом, чтобы определить правильный формат даты (дд / мм или мм / дд) в ответ формы Google. Когда я использую namedValues ​​объекта: функция onFormSubmit (е) {вар namedValues ​​= e.namedValues; дата вар = namedValues ​​[ 'Дата']; // Date = [05/06/2018] дата вар = новая дата (дата); Logger.log (дата); // Вс 6 мая 00:00:00 GMT + 10: 00 +2018} Когда я использую значение из таблицы: функция onFormSubmit (е) {диапазон переменного = e.range; переменная строка = range.getRow (); вар сс = SpreadsheetApp.getActiveSpreadsheet (); вар лист = ss.getSheetByName ( 'Ответы на форму 1'); дата переменная = sheet.getRange (строка 2) .getValue (); Logger.log (дата); // пн 5 июня 00:00:00 GMT + 10: 00 2018} Я не знаю, должен ли я, но я не решаются с использованием значений из таблицы в триггере onFormSubmit, так как я испытал нестабильность в прошлом, когда я думаю, что триггер работает, прежде чем данные в настоящее время размещены в таблицу. Я не могу найти что-либо в формах документации Google о том, является ли ответ дата всегда в согласованном формате. Если он был всегда дд / мм / гггг я мог бы построить дату, используя части строки. Есть ли способ использовать определить правильный формат даты от namedValues ​​объекта? PS Я предпочел бы не использовать moment.js библиотеки для этого одно требования, так сильно, чтобы понять, если его можно без. Есть ли способ использовать определить правильный формат даты от namedValues ​​объекта? PS Я предпочел бы не использовать moment.js библиотеки для этого одно требования, так сильно, чтобы понять, если его можно без. Есть ли способ использовать определить правильный формат даты от namedValues ​​объекта? PS Я предпочел бы не использовать moment.js библиотеки для этого одно требования, так сильно, чтобы понять, если его можно без.
beano
1

голосов
0

ответ
36

Просмотры

Преобразование подчеркнутого текста выделенного текста в Google Docs

Я хотел бы написать сценарий, чтобы выделить любое слово в документе Google, который подчеркнут. Это ближе всего я мог бы найти. (Примечание - в последней строке молока будет желтым, а не серым.) Пример я пошел в магазин и купил молоко и яйцо. изменится на это: я пошел в магазин и купил молоко и яйца.
moonshot
1

голосов
1

ответ
43

Просмотры

Как скопировать активный текст из Google Docs в таблицу с пунктом меню / опции

Я довольно новый для Google Apps, и я знаю, что подобные вопросы были заданы, но они только адресовать аналогичные проблемы. Я надеюсь, что вы можете мне помочь. Я хочу, чтобы скопировать активный текст из Документов Google для данной таблицы с помощью кнопки. Я сделал аналогично для таблицы в таблицу, но я неудачу на документы в электронную таблицу. функционировать OnOpen (е) {DocumentApp.getUi () .createMenu ( "Копировать активный диапазон.) .addItem ( 'Copy Button', 'Копировать') .addToUi (); } Функция копирования () {вар сс = DocumentApp.getActiveDocument (); Выбор вар = ss.getSelection (); вар TSS = SpreadsheetApp.openById ( "ххх"); вар ц = tss.getSheetByName ( "название"); trange = ts.getRange ( "B6: B6") selection.copyto (trange);
JoeL31
1

голосов
0

ответ
234

Просмотры

Изменение цвета текста входа в Gmail Надстройка на

Я использую Google Apps Script для Gmail Добавить-на. Изменение «SecondaryColor» в файле манифеста для Gmail дополнения не меняет цвет формы входов (TextInput). Оно написано в документации, что она изменит цвет обеих кнопок и элементов формы, но не кажется, что работает для элементов формы. Вот код моего файла манифеста. { "Gmail": { "имя": "ColorTesting", "logoUrl": "https://www.gstatic.com/images/icons/material/system/2x/bookmark_black_24dp.png", "primaryColor": «# 428500" , "SecondaryColor": "# 18A390", "contextualTriggers": [{ "безусловная": {}, "onTriggerFunction": "getContextualAddOn"}], "вариант": "
Biren Prajapati
1

голосов
1

ответ
96

Просмотры

Script to auto forward (BCC) message to contact group

Я пытаюсь создать сценарий, который будет перенаправлять последнее сообщение в любом потоке с определенным ярлыком ( «послать к испытанию») для определенной группы контактов ( «FWD-тест»). Я основывался в большой степени на StackExchange: Как я могу автоматически пересылать сообщения электронной почты Gmail, когда применяется метка? Сценарий я придумал до сих пор ниже: функция autofwd () {// целевого почтового ярлыка вар inlabel = «послать к испытанию»; Logger.log ( "Target почта ярлык:" + inlabel); // обработанная почта этикетка вар outlabel = «послал к испытанию»; Logger.log ( "обработанная почта этикетка:" + outlabel); // Получить список контактов для FWD в вар группе = ContactsApp.getContactGroup ( 'FWD-тест'); вар контакты = ContactsApp.getContactsByGroup (группа); вар электронная почта = новый String (); для (вар я = 0; я
JTL16571
1

голосов
0

ответ
362

Просмотры

При обновлении события календаря с Google сценария, как отправить уведомление

Из таблицы Google создать события с помощью Google Script. При создании событий я могу отправлять уведомления гостей. Один или несколько событий должны быть обновлены иногда (место изменение, добавление / удаление людей и т.д.). Обновления работают только я не могу найти, как отправить уведомление людей (не все гости будут в Google Calendar). Хотя я видел что-то в API, который может сделать трюк, я не знаю, если это возможно / как encorporate это в сценарии я написал. Пожалуйста, порекомендуйте. Обновление 20180130 @ 10: 39: Ошибка: недопустимый функция участник электронной почты sendInvite (calendarId, EVENTID, электронная почта) {вар п = eventId.indexOf ( "@") вар Str = eventId.substring (0, п) вар событий = Calendar.Events .get (calendarId, ул); Logger.log (event.attendees); если (event.attendees) {event.attendees.push ({электронная почта: адрес электронной почты}); } Еще {событие. чел = новый Array ({адрес электронной почты: адрес электронной почты}); } Logger.log ( '') Logger.log (event.attendees) Logger.log ( '') Logger.log (событие) = событие Calendar.Events.patch (событие, calendarId, ул, {sendNotifications: истинные}); } Журнал показывает после удаления identifiables: 18-01-30 10: 31: 27: 213 CET] [{responseStatus = needsAction, [email protected]}, {responseStatus = needsAction, [email protected]} ] [18-01-30 10: 31: 27: 214 CET] [18-01-30 10: 31: 27: 215 CET] [{responseStatus = needsAction, [email protected]}, {responseStatus = needsAction , [email protected]}, {электронная почта = некоторые @ something.com, некоторые @ something.com}] [18-01-30 10: 31: 27: 215 CET] [18-01-30 10:31 : 27: 216] {CET напоминания = {useDefault = истина}, резюме = тест 3, создатель = {DisplayName = MyName, само = верно, [email protected]}, вид = календарь # событие, htmlLink = HTTPS: //www.google.
Stefan van Aalst
1

голосов
1

ответ
1.7k

Просмотры

Создать форму Unique ID Google

У меня есть форма Google, которая заполняющий Ответы таблицы. У меня есть базовое понимание скриптов и запускать их. Я не совсем уверен, с чего начать на этом, хотя .. Пользователь отправляет форму и новая строка создается на строке (пример) 452 в таблице ответов. Ответы заполнить столбцы A до D. Я хотел бы столбец Е на этой новой строки должны быть заполнены «YES». Может кто-то помочь мне начать на этом, пожалуйста? Это моя Cude попытка кода: функция InsertID () {// этот скрипт запускается для запуска «From Spreadsheet» на «Form Submit» вар сс = SpreadsheetApp.getActiveSpreadsheet (); вар лист = ss.getActiveSheet (); вар LatestID = sheet.getRange (1, 6) .getValue () // ячейке F1 содержит последнюю идентификационный номер выдаваемой строки = newform.row клетки (строка,
John Cassell
1

голосов
2

ответ
65

Просмотры

конкатенации динамических столбцов с помощью Google appscript

Я хочу, чтобы объединить столбцы, которые являются динамическими, используя appscript программно. Смотрите скриншот, что мои данные выглядит и то, что выход я пытаюсь достичь: я был в состоянии достигнуть конкатенацию статического / фиксированного нет. столбцов, используя код, приведенный ниже. Функция конкатенации () {вар сс = SpreadsheetApp.getActiveSpreadsheet (); вар SheetName = ss.getSheetByName ( "Лист1"); вар LR = sheetName.getLastRow (); вар LC = sheetName.getLastColumn (); вар rangeValue = sheetName.getRange (2, 1, Lr-1, ЛК) .getValues ​​(); для (вар я = 0; я
Bala
1

голосов
1

ответ
355

Просмотры

Google приложение сценарий, Gmail аддон совместите центр действий и стилизацию TextInput

У меня есть создать простой GMAIL аддон с помощью Google скрипт, в том, что я должен бороться здесь, я использовал простую карту, проблема, нам нужно выровнять кнопку действия в центре карты и применить стили CSS для TextInput я есть передать документ, но не находите любые методы, приведенный ниже код я пытался, уаг карту = CardService.newCardBuilder (); card.setHeader (CardService.newCardHeader () SETTITLE ( "Авторизация").); вар раздел = CardService.newCardSection () вар cleint_id_Input = CardService.newTextInput () .setFieldName ( "client_id") .setTitle ( "Пожалуйста, введите clinet идентификатор") вар username_Input = CardService.newTextInput () .setFieldName ( "имя пользователя") .setTitle ( "Пожалуйста, введите имя пользователя") вар password_Input = CardService.newTextInput () .setFieldName ( "пароль") .setTitle (»
Robert
1

голосов
2

ответ
1.9k

Просмотры

Как сделать проверку выпадающих данных в оперативном диалоге с помощью Google скрипт?

Я пытаюсь использовать Google скрипт для создания оперативного диалога для пользователя с раскрывающимся списком. Вот где я в данный момент: функция addProject () {вар щ = SpreadsheetApp.getUi (); // То же вариации. вар результат = ui.prompt ( 'Выберите проект из выпадающего списка', '(использование "Index Project" лист для добавления проекта)', ui.ButtonSet.OK); // Обрабатывает ответ пользователя. Кнопка вар = result.getSelectedButton (); Текст вар = result.getResponseText (); если (кнопка == ui.Button.OK) {// Пользователь щелкнул "ОК". ui.alert ( 'Вы выбрали' + текст + ''); } Еще если (кнопка == ui.Button.CANCEL) {// Пользователь нажал "Отмена". ui.alert ( «Я Жду \» т получить ваш проект.); }} Кнопка в моем листе активирует эту функцию. Все это делает создать запрос, который вы можете ввести строку в. Но мне нужно использовать проверку данных, чтобы создать раскрывающийся список, который ссылается на ряд других в моем листе, так что пользователь может ввести все, что угодно. Может кто-то помочь мне получить выпадающий список безотлагательным диалога? Спасибо!
Alex Libengood
1

голосов
3

ответ
910

Просмотры

Update Image in Google Slides when Image updated in Google Drive

My objective is to automatize the creation and update of a Google Slides presentation based on Images in a folder: The Current workflow which is working correctly, but which I want to automatize is follows: Images are in a Google Drive Folder I manually add images to each slide using the File Picker Menu (Insert --> Image --> Drive) Images in folder are periodically updated by an external script, replacing the previous images using the same filename. Images keep the same Google Drive File ID Images are updated automatically in Slides, with changes visible when reloading the Slides Presentation in the browser What I try to achieve: Instead of creating the Slides and inserting the images using the File Picker one by one, use a script that creates the presentation based on the image files in the Drive Folder. I have used the Tutorial on the Google Developers Pages and the creation of the Slides works fine. However in contrast to the manual insert, the images in the slides created by the script do not update. The script fetches the images just once and seems to use a "copy of the images". My Test code is: var NAME = "Dynamic Image Insert Test"; var presentation = SlidesApp.create(NAME); function addImageSlide(fileID, index) { var slide = presentation.appendSlide(SlidesApp.PredefinedLayout.BLANK); var imageurl = DriveApp.getFileById(fileID); var image = slide.insertImage(imageurl); var imgWidth = image.getWidth(); var imgHeight = image.getHeight(); var pageWidth = presentation.getPageWidth(); var pageHeight = presentation.getPageHeight(); var newX = pageWidth/2. - imgWidth/2.; var newY = pageHeight/2. - imgHeight/2.; image.setLeft(newX).setTop(newY); } function main() { var images = [ "Insert ID of a File 1 on Google Drive here", "Insert ID of a File 2 on Google Drive here" ]; var [title, subtitle] = presentation.getSlides()[0].getPageElements(); title.asShape().getText().setText(NAME); subtitle.asShape().getText().setText("Insert Files from Drive using File ID"); images.forEach(addImageSlide); } Furthermore when checking the Object Properties of the Slide Page It seems there are 2 Parameters: contentUrl and sourceUrl: When Inserting with the File Picker the Image seems to use the sourceUrl, which stays the same and this way updates the Image when the file is updated on Drive. When using the AppScript (or using API - tested also) the Image seems to use the contentUrl, which is generate each time when creating the image and thus does not refer to the file on the drive and therefore not reflecting any change to the file on the drive. Logger output of the Page Object Properties: { "pageElements": [ { "transform": { "scaleX": 171.123, "scaleY": 171.123, "unit": "EMU", "translateY": 1288327.54, "translateX": 2375975 }, "objectId": "MyImage_01", "image": { "sourceUrl": "https://lh3.google.com/u/0/d/This-is-the-static-file-id", "contentUrl": "https://lh6.googleusercontent.com/This-is-the-id-created-when-creating-the-image-on-the-slide", "imageProperties": { "shadow": { "color": { "rgbColor": {} }, "blurRadius": { "unit": "EMU" }, "type": "OUTER", "transform": { "scaleX": 1, "scaleY": 1, "unit": "EMU" }, "alpha": 1, "propertyState": "NOT_RENDERED", "rotateWithShape": false, "alignment": "BOTTOM_LEFT" }, "outline": { "dashStyle": "SOLID", "propertyState": "NOT_RENDERED", "weight": { "unit": "EMU", "magnitude": 9525 }, "outlineFill": { "solidFill": { "color": { "themeColor": "DARK2" }, "alpha": 1 } } } } }, "size": { "width": { "unit": "EMU", "magnitude": 23375 }, "height": { "unit": "EMU", "magnitude": 15000 } } } ] } Also sourceUrl is not documented in the reference of the API. Any Idea how to use sourceUrl instead of contentUrl when inserting Slides? How can I replicate the same Insert statement and File Reference as the File Picker, using Google app script?
Core Tek
1

голосов
0

ответ
429

Просмотры

Google Charts - Vertical Axis - Word wrapping on series labels (vertical chart)

I am trying to create line breaks or word wrapping on the series labels of my chart. Using '\n' works when I am creating a chart with horizontal orientation: However, as soon as I attempt a line break in the vertical orientation, the label ends with '...', even though there is enough width on the vertical series axis (blue outline from mouse hover) for the text: Notes: I am using Google Charts as my chart generator and Google Sheets as my container. Thanks! Code snippet with orientation set as 'vertical': google.charts.load('current', {'packages':['corechart']}); google.charts.setOnLoadCallback(drawVisualization); function drawVisualization() { var data = google.visualization.arrayToDataTable([ ['Metric 1\n Desc of Metric', 20, 28, 38, 45, 50], ['Metric 2\n Desc of Metric', 31, 38, 55, 66, 50], ['Metric 2\n Desc of Metric', 50, 55, 77, 80, 50], ['Metric 2\n Desc of Metric', 77, 77, 66, 50, 50] // Treat first row as data as well. ], true); var options = { title : 'Metrics and Values', vAxis: {title: 'Values'}, hAxis: {title: 'Metrics'}, seriesType: 'candlesticks', isStacked: true, orientation: 'vertical', series: { //0: {color: 'white', stroke-width: 4}, 1: {type: 'line', pointShape: 'circle', pointSize: 15, lineWidth: 0} }, chartArea: { width: "50%", height: "70%" } }; var chart = new google.visualization.ComboChart(document.getElementById('chart_div')); chart.draw(data, options);
Nelson
1

голосов
0

ответ
18

Просмотры

генерировать штрих-кода от случайных цифр генератора с помощью appscript

Я новичок в Google Apps Script, я хочу знать, как вы можете создать штрих-код из 4 цифр уникального номера генерируемого из ниже сценария. Функция SignOut (е) {вар сс = SpreadsheetApp.openById ( '1VbRt0Kt7KH8Asc_NfdDYhs7LYtxq5n5JxO8SJzD5GoM'); вар ss_live = ss.getSheetByName ( 'Live'); . вар кода = ss_live.getRange ( "I:") GetValues ​​(); вар time_out = Utilities.formatDate (новая дата (), "GMT + 11", "чч: мм а"); вар сообщение; если (e.SignOutCode == «») {сообщение = «Введите код Выход из системы»; } Еще {для (вар я = 0; я
Sam Aarius
1

голосов
0

ответ
391

Просмотры

Как обрабатывать ошибки таймаута, если Невер пользователя нажать на предупреждение?

У меня есть Google Таблицы Надстройки на котором используются диалоговые окна, предоставляемых службой App Script Ui, т.е. SpreadsheetApp.getUi (). Предупреждение (...). Как правило, это работает отлично, если пользователь не не выбирает опцию или закрыть оповещение в течение 5 минут (говорят, что они переключиться на другую вкладку или оставить свой компьютер), в этом случае кинули «Тайм-аут» исключение. Мой код: вар Ui = SpreadsheetApp.getUi (); вар ответ = ui.alert (MSG, ui.ButtonSet.YES_NO); Возвращение (ответ == ui.Button.YES); И ошибка в исполнении транскрипта Apps Script: [18-02-27 16: 40: 18: 080 EST] Начало выполнения [18-02-27 16: 40: 18: 096] EST SpreadsheetApp.getUi () [0 секунд ] [18-02-27 16: 45: 18: 160 EST] Ui.alert ([вы уверены, что хотите удалить эту вещь ?, YES_NO]) [300.063 секунд] [18-02-27 16:45:18 : 166 EST] Не удалось завершить выполнение Таймаут ожидания ответа пользователя (строка 289, файл «Код») [300.066 секунд Общее время выполнения] После того, как исключение, предупреждение остается видимым, а если пользователь возвращается и хиты «Да» выше функция еще не возвращает истину. Он просто закрывает диалог, и пользователь должен попробовать еще раз. Если бы я только добавить TRY / поймать вокруг предупреждения, пользователь не будет знать, что предупреждение становится бесполезным через 5 минут. В идеале я мог бы назвать что-то вроде alert.close (), но не существует никаких методов, как я могу найти. Есть ли лучший способ справиться с этим, или я должен просто переключиться на использование HTML / JavaScript для получения оповещений? Если бы я только добавить TRY / поймать вокруг предупреждения, пользователь не будет знать, что предупреждение становится бесполезным через 5 минут. В идеале я мог бы назвать что-то вроде alert.close (), но не существует никаких методов, как я могу найти. Есть ли лучший способ справиться с этим, или я должен просто переключиться на использование HTML / JavaScript для получения оповещений? Если бы я только добавить TRY / поймать вокруг предупреждения, пользователь не будет знать, что предупреждение становится бесполезным через 5 минут. В идеале я мог бы назвать что-то вроде alert.close (), но не существует никаких методов, как я могу найти. Есть ли лучший способ справиться с этим, или я должен просто переключиться на использование HTML / JavaScript для получения оповещений?
user1754115
1

голосов
1

ответ
54

Просмотры

Google Script не работает последовательно

У меня возникли проблемы с некоторыми создания некоторых функций в Google Script. Я пытаюсь запросить диапазон затем скопировать и вставить его значение, однако, кажется, не сработал, даже когда я ставлю таймер сна между ними. Это, однако, бежать, когда я закомментируйте копировать и вставлять. Любая помощь приветствуется! Функция setAndCopy (SheetName) {вар лист = SpreadsheetApp.getActiveSpreadsheet () getSheetByName (SheetName). sheet.getRange ( "B3: Р") clearContent ();. вар targetCell = sheet.getRange ( "B3"); вар formulaString = "= запрос (! Транспорт A2: AM, \" Выберите A, B, C, D, E, K, где Е '' \ ")"; targetCell.setFormula (formulaString); Utilities.sleep (10000); sheet.getRange ( "B3: Р") CopyTo (sheet.getRange ( "B3: Р"), {contentsOnly: истинно}). }
Halen Lakes
1

голосов
0

ответ
56

Просмотры

Создание триггеров в моем Drive против Team Drive

У меня возникают проблемы при создании триггера в листах. Ошибка я получаю «Действие не разрешено», когда код получает .create (). То, что я не понимаю, я могу запустить этот код на документе в myDrive, но если я использую этот код в Team Drive листе не позволит. Как я могу создать триггер в команде ведущего листа / док? ScriptApp.newTrigger ( 'туРипсЫоп') .forSpreadsheet ( 'ID') .onEdit () .create (); Кроме того, я устал .forSpreadsheet (SpreadsheetApp.getActive ()) .forSpreadsheet (SpreadsheetApp.getActiveSpreadsheet ())
1

голосов
0

ответ
1.5k

Просмотры

Работа вокруг для Google предела Листовая на ImportXml

Я пытаюсь импортировать данные в лист Google с помощью функции ImportXml. По-видимому, есть предел тому, сколько раз вы можете использовать эту функцию в листе. Если вы достигли предела формула будет застревать в «загрузка ...». Я получаю эту проблему, используя ее не более чем в 20 раз. Мне нужно получить данные из> 200 адресов. Поэтому я хочу, чтобы создать сценарий листа Google, который запускает ImportXml в нескольких ячейках и копирует результат и паст в качестве значений. Затем цикл это с новым входом URL. Похоже, простой скрипт ... вар сс = SpreadsheetApp.getActiveSpreadsheet (); для (вар х = 0, х <2; х ++) {// Копировать URL из списка в X-колонки:. ss.getSheetByName ( 'Лист1') getRange ( "X" + (2 + х)). CopyTo (ss.getSheetByName ( 'Лист1') getRange ( "А2").); // вставить результат от ImportXML формул в качестве значений по ряду 250+: сс. getSheetByName ( 'Лист1') getRange. ( "В2: С2"). CopyTo (. ss.getSheetByName ( 'Лист1') getRange ( "В" + (250 + х) + ": С" + (250 + х)), {contentsOnly: истинно}); } В результате из сценария является то, что только значения из последнего запуска цикла повторяются на каждой строке. Я попробовал задержки в сценарии (Utilities.sleep (1000)), чтобы позволить клеткам обновить, но это не помогает. Любые другие идеи о том, как я могу решить эту проблему? но это не помогает. Любые другие идеи о том, как я могу решить эту проблему? но это не помогает. Любые другие идеи о том, как я могу решить эту проблему?
Gustav
1

голосов
0

ответ
197

Просмотры

Google Apps Script Копирование диапазона на другой лист на основе значения ячейки

У меня есть таблица в листе, в котором у меня есть ВПР, чтобы проверить против другого листа, который содержит те же данные, и определить, есть ли какие-либо пропущенные строки (несоответствие). Я хочу, чтобы скопировать и вставить недостающие строки, определенные по формуле ВПР: колонка I = «# N / A» Я застрял со следующим кодом, любая помощь очень ценится: функция CopyMissingRows (е) {если (e.values ​​[ 8] == '# N / A') {// сделать что-то вар таблицы = SpreadsheetApp.getActive (); spreadsheet.getRange ( 'A2: G2') активировать ();. вар currentCell = spreadsheet.getCurrentCell (); spreadsheet.setActiveSheet (spreadsheet.getSheetByName ( 'Хорошие события'), правда); spreadsheet.getRange ( 'Sales кал') CopyTo (spreadsheet.getActiveRange (), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, ложь). } Еще {// сделать что-то еще}
eddub
1

голосов
0

ответ
83

Просмотры

Удалить содержимое из G-Drive Bin - Использование сценария Google

Я использовал (истинный) метод .setTrash для перемещения файлов в методе bin.This (как триггер) работает каждый день. Но мой размер бина также увеличивается. Я не нашел каких-либо конкретных решений, которые могут удалять файлы из бункера тоже.
sandeep
1

голосов
0

ответ
207

Просмотры

Gmail add-on: Save email as .eml to a local directory

Попытка построить простую функциональность, которая при выполнении сохраняет открытое письмо, как .eml на локальный компьютер. С ниже кода электронной почты сохраняется в original_msg.txt В настройках Chrome можно заставить «Сохранить как» диалогового окна, чтобы открыть и настроить его .eml, это хорошо, но проблема в том, когда вы выполняете скрипт открывает пустой вкладка, которая остается открытым даже после завершения загрузки. Я смотрю на либо закрыть вкладку как-то, или изменить способ, которым я подхожу эту задачу. Code.gs функция saveEmail (е) {// Активация временный Gmail надстройка областей, в данном случае, так что // метаданные открытого сообщения могут быть прочитаны. вар = e.messageMetadata.accessToken маркер доступа; GmailApp.setCurrentMessageAccessToken (маркер доступа); // Строит URL, чтобы открыть на основе базового URL и идентификатор сообщения. вар Код = e.messageMetadata. MESSAGEID; вар URL = "https://mail.google.com/mail/u/0?view=att&th=" + MESSAGEID + "& attid = 0 & дисп = Comp & безопасно = 1 & ZW"; вернуться CardService.newUniversalActionResponseBuilder () .setOpenLink (CardService.newOpenLink () .setUrl (URL)) .build (); } appscript.json { "oauthScopes": [ "https://www.googleapis.com/auth/gmail.addons.execute", «https://www.googleapis.com/auth/gmail.addons.current.message .metadata»], "Gmail": { "имя": "Сохранить Выслать", "logoUrl": "https://www.example.com/hosted/images/2x/my-icon.png", "universalActions" : [{ "текст": "Сохранить Email", "runFunction": "saveEmail"}], "версия": "
Spagett
1

голосов
2

ответ
761

Просмотры

попробуйте / ошибки поймать обработки в веб-приложение

Я заметил, что, когда ошибка возникает в Try / поймать блока в Google Apps Script, Logger.log (е InstanceOf Error) возвращает истину. Но, когда тот же объект передаются обратно клиенту в заявлении улова, он регистрирует ложным. выборочная функция GAS IsValid () {} вернуться ложные функции тестирования () {попробуйте {если (! IsValid ()) {певд Error ( "отказ")} возвращение "успех"} поймать (е) {Logger.log (е InstanceOf Error) // истинный возврат х // ложны в клиенте при тестировании console.log (е InstanceOf ошибка)}} функция клиента Foo () {google.script.run.withSuccessHandler (OnSuccess) .withFailureHandler (OnFailure) .testing ( ); } Функция OnSuccess (е) {console.log (е InstanceOf Error) // ложный console.log (е) // нуль} функция OnFailure (е) {консоли.
Brian
0

голосов
0

ответ
3

Просмотры

Как вставить значения из метода batchGet в Google лист с помощью приложения сценария?

Я написал сценарий, который получает некоторые данные из Google Analytics API с помощью метода batchGet, который содержит 2 размеров и 3 метрики. Тем не менее, я не знаю, как вставить эти данные в лист Google. Существует сценарий я написал, я не знаю, как действовать функция get_ga () {уаг START_DATE = «2019-04-01»; вар дата_окончания = '2019-04-15'; вар сс = SpreadsheetApp.getActiveSpreadsheet (); вар лист = ss.getSheetByName ( "Лист1"); запрос вара = { "reportRequests": [{ "viewId": '26676016', "dateRanges": [{ "StartDate": дата_начали "EndDate": дата_окончания}], "метрика": [{ "выражение": «га : transactionRevenue "}, {" выражение ":" ГА: сделки "}, {" выражение ":" ГА: Sessions "}],
Berkay Songur
1

голосов
1

ответ
476

Просмотры

Календарь API (Google Apps Script) Проект не найден и не может использоваться для вызовов API

Я использую Google Apps Сценарии после этого урока. Когда я выполняю код я получаю следующее сообщение об ошибке: Проект 719340009941 не найден и не может использоваться для вызовов API. Если он недавно создан, включите Calendar API я пошел к ресурсам -> Advanced Google Services и я включил календарь. Тогда я нажал на ссылку проекта Cloud Platform. Я не мог непосредственно искать календарное API, я должен был создать проект первым (который я назвал календарь). Я искал Calendar API и позволил ей. Когда я нахожусь на странице календаря API он говорит мне: включена API. Я не понимаю, почему сценарий дает мне ошибку. Если я захожу по ссылке проекта (который обеспечивает ошибка) я получаю следующее сообщение об ошибке API-интерфейс «calendar.googleapis.com» не существует или у вас нет разрешения на доступ к нему
Sander Hansen
1

голосов
1

ответ
44

Просмотры

Как я могу заменить изображение в Документах Google?

Я пытаюсь вставить изображения в Google Docs (другой GSuite приложение позже) из дополнения. Я преуспел в выборке изображения и вставить его, когда getCursor () возвращает действительные позиции. Когда есть выбор (вместо курсора), я могу добиться успеха, если это текст, который выбран пешком до Родитель выделенного текста и вставки изображения в начале абзаца (не идеальный, но ОК). UPDATE: Кажется, что я использовал устаревший метод (getSelectedElements ()), но не решить проблему. Кажется, проблема только с обернутыми изображениями, а также (я не понимал, что тип объекта изменяется, когда вы изменили его в свернутом тексте). Однако, когда обернутый-текст изображения (предположительно PositionedImage) подсвечивается (с поворота и изменения размера ручки видны синим цветом), как GetSelection () и getCursor () возвращает нуль. Это проблема, как я хотел бы быть в состоянии получить этот образ и заменить его на один я вставляя. Вот мой код ... любая помощь будет большой. ответ вар = UrlFetchApp.fetch (imageTokenURL); Выбор вар = DocumentApp.getActiveDocument () GetSelection (). если (выбор) {Logger.log ( "Got Selection"); переменная заменена = ложь; вар элементы = selection.getRangeElements (); если (elements.length === 1 && элементы [0] .getElement () GetType () === DocumentApp.ElementType.INLINE_IMAGE.) {// заменить URL - это никогда не происходит} // иначе, мы берем первый элемент и работа оттуда: вар = firstElem элементы [0] .getElement (); Logger.log ( "Первый элемент Тип =" + firstElem.getType ()); если (firstElem.getType () == DocumentApp.ElementType. ПУНКТ) {вар newImage = firstElem.asParagraph () insertInlineImage (0, ответ). newImage.setHeight (200); newImage.setWidth (200); } Иначе, если (firstElem.getType () == DocumentApp.ElementType.TEXT) {вар р = firstElem.getParent (); если (p.getType () == DocumentApp.ElementType.PARAGRAPH) {вар индекс = p.asParagraph () getChildIndex (firstElem). вар newImage = p.asParagraph () insertInlineImage (индекс, ответ). newImage.setHeight (200); newImage.setWidth (200); }}} Еще {Logger.log ( "Проверка Курсор"); вар курсор = DocumentApp.getActiveDocument () getCursor (). если (курсор) {Logger.log ( "Got Курсор:" + курсор); вар newImage = cursor.insertInlineImage (ответ); вар р = cursor.getElement (); Размер вар = 200; newImage.setHeight (размер); новое изображение. setWidth (размер); }}
Bill Binko
1

голосов
0

ответ
299

Просмотры

Google Лист: Сценарий - Copy / Paste, задержка времени, Copy / Paste, повторить для всех значений в столбце

Я пытаюсь построить таблицу, которая автоматически вычисляет самоценность списка акций. Ячейка 3 и 4 ячеек связаны с другим листом, который имеет ряд формул, включая данные, полученные из внешних веб-сайтов. Я хотел бы написать сценарий для пользовательской функции, которая будет использовать эту установку: вводится в ячейку 2, с ячейкой 1 в качестве аргумента копирует значение тикерного (ячейки 1) в камеру 3, активируя другие функции листа, чтобы сделать их расчеты После некоторое время (например, 30 секунд), считывает значение в ячейке 4 из этих других функций возвращает окончательное значение в ячейку 2. Я бы затем использовать эту функцию для всех значений в столбце A. до сих пор Ive были в состоянии выяснить, как скопировать и вставить одно значение. Любое руководство будет оценено, спасибо заранее. Функция Val (код) {вар лист = SpreadsheetApp.getActiveSpreadsheet (); // доступ к таблице SpreadsheetApp.setActiveSheet (sheet.getSheetByName ( 'Список компаний')); // доступ к листу по диапазону имени вар = sheet.getRange ( «А2»); // назначить диапазон, который вы хотите скопировать вар копирования = range.getValues ​​(); sheet.getRange ( 'D2'). SetValue (копия) // новый диапазон вы хотите, чтобы вставить значение}
Anthony Shi
1

голосов
0

ответ
86

Просмотры

Запуск Google Script при добавлении файла в папку

Я хотел бы сценарий Google запускать каждый раз, когда файл добавляется в отдельную папку. Можно ли это сделать? В настоящее время, у меня есть триггер, который вызывает скрипт запускать каждую минуту, однако это не всегда достаточно быстро.
Lontronix
1

голосов
0

ответ
273

Просмотры

Google Script e.range is object Object instead of object Range

У меня есть этот простой код, который я использую для тестирования. У меня есть «по форме представить» устанавливаемый триггер на моей таблице, которая работает каждый раз, когда форма передается. Мне нужно знать диапазон, в котором был скопирован ответ и ответов. Таким образом, я использую эту функцию код MYFUNCTION (событие) {вар Response = event.values ​​вар Rango = event.range вар Row = Rango.getRow ()} В event.values ​​работает нормально, но event.range не делает. Insted получения объекта Range это возвращение объекта Object. Это то, что ошибка говорит TypeError: Не удается найти функцию GetRow в объект [объект Object]. (Строка 4, файл «Код») Это довольно странно, потому что код работает правильно, прежде чем. Чтобы быть более конкретным: Я проверяю это, заполнив форму. Я знаю, что событие. значения работает отлично, потому что я добавил строку кода, чтобы отправить мне письмо с event.values ​​и event.range содержания. На самом деле, я мог получить доступ к содержимому этого объекта Object с использованием диапазона [ «rowEnd»]. Но прежде, чем я мог бы просто использовать Range.getRow (), так как эта переменная Range действительно объект Range. Это ссылка таблицы: https://docs.google.com/spreadsheets/d/1G6fXTkcbibxUZ29cxVTwkNzL5nircsIz2F573IXIUf4/edit?usp=sharing это соединение формы: https: //docs.google.com/forms/d/e/1FAIpQLScvHD13JVpMHh3eikRseBbOu6OYlkacK_mkMotVJi9bI_MK0g ? / viewform УСП = sf_link Update: После нескольких недель попыток много вещей, я просто понял, что это разрешение ошибка (я думаю) я сброшена все разрешения на панели безопасности моего аккаунта Google и снова предоставлены разрешения и DONE. я мог получить доступ к содержимому этого объекта Object с использованием диапазона [ «rowEnd»]. Но прежде, чем я мог бы просто использовать Range.getRow (), так как эта переменная Range действительно объект Range. Это ссылка таблицы: https://docs.google.com/spreadsheets/d/1G6fXTkcbibxUZ29cxVTwkNzL5nircsIz2F573IXIUf4/edit?usp=sharing это соединение формы: https: //docs.google.com/forms/d/e/1FAIpQLScvHD13JVpMHh3eikRseBbOu6OYlkacK_mkMotVJi9bI_MK0g ? / viewform УСП = sf_link Update: После нескольких недель попыток много вещей, я просто понял, что это разрешение ошибка (я думаю) я сброшена все разрешения на панели безопасности моего аккаунта Google и снова предоставлены разрешения и DONE. я мог получить доступ к содержимому этого объекта Object с использованием диапазона [ «rowEnd»]. Но прежде, чем я мог бы просто использовать Range.getRow (), так как эта переменная Range действительно объект Range. Это ссылка таблицы: https://docs.google.com/spreadsheets/d/1G6fXTkcbibxUZ29cxVTwkNzL5nircsIz2F573IXIUf4/edit?usp=sharing это соединение формы: https: //docs.google.com/forms/d/e/1FAIpQLScvHD13JVpMHh3eikRseBbOu6OYlkacK_mkMotVJi9bI_MK0g ? / viewform УСП = sf_link Update: После нескольких недель попыток много вещей, я просто понял, что это разрешение ошибка (я думаю) я сброшена все разрешения на панели безопасности моего аккаунта Google и снова предоставлены разрешения и DONE.
Ricardo Otero
1

голосов
0

ответ
73

Просмотры

Проблема с выбором выпадающего вводом виджетом

Входной виджет выбора выпадающего используется для правильного отображения длинных предметов, как хорошо, но внезапно был изменен Google, чтобы выглядеть и чувствовать себя более в соответствии с материалом UI. Как показывают длинные пункты в новом выбора выпадающего ввода виджете? Edit: Для того, чтобы увидеть, что я имею в виду, посмотрите на эту GIF http://recordit.co/3XvTeLnJCR/gif/notify.
akshay
1

голосов
0

ответ
27

Просмотры

Google Скрипт для удаления имени из деятельности перечня не работает

Я пытаюсь написать сценарий для моего женского общества списка, но я не могу заставить его работать. Я хочу, чтобы иметь возможность ввести статус девушки и есть сценарий удалить свое имя из списка Actives на то, что обозначение она требует, если она не является выпускающей или передачи, то мне просто нужно это скопировать ее имя на этой странице, из простынь. Вот что у меня есть: функция onEdit () {// принимает исходные данные в листе с именем Активов (не в ожидании завершения / отставка) // целевого лист шага к имени другим (не активны), Отставку В ожидании или прекращение ожидания // тест колонки со статусом находится столбец 4 или D. вар лист = SpreadsheetApp.getActiveSpreadsheet (); вар с = SpreadsheetApp.getActive (); вар г = SpreadsheetApp.getActiveRange (), если (s.getName () == "Actives (не в ожидании завершения / отставки)" && r.getColumn () == d & & R.getValue () == "ушел") {вар строка = r.getRow (); вар numColumns = s.getLastColumn (); вар targetSheet = sheet.getSheetByName () == "Отставка Ожидание"; целевая переменная = targetSheet.getRange (targetSheet.getLastRow () + 1, 1); s.getRange (строка, 1, 1, numColumns) .moveTo (мишень); s.deleteRow (строка); } Если (s.getName () == "(не Actives в ожидании завершения / отставки)" && r.getColumn () == 4 && r.getValue () == "передано") {вар строка = r.getRow () ; вар numColumns = s.getColumn (я); вар targetSheet = sheet.getSheetByName () == "Другой (неактивный)"; целевая переменная = targetSheet.getRange (targetSheet.getLastRow () + 1, 1); s.getRange (строка, 1, 1, numColumns) .moveTo (мишень); s.deleteRow (строка); } Если (s.getName () == " MoveTo (цель); s.deleteRow (строка); } Если (s.getName () == "(не Actives в ожидании завершения / отставки)" && r.getColumn () == 4 && r.getValue () == "Термин") {вар строка = r.getRow () ; вар numColumns = s.getLastColumn (); вар targetSheet = sheet.getSheetByName () == "Прекращение очереди"; целевая переменная = targetSheet.getRange (targetSheet.getLastRow () + 1, 1); s.getRange (строка, 1, 1, numColumns) .moveTo (мишень); s.deleteRow (строка); } Если (s.getName () == "(не Actives в ожидании завершения / отставки)" && r.getColumn () == 4 && r.getValue () == "grad4") {вар строка = r.getRow () ; вар numColumns = s.getLastColumn (); вар targetSheet = sheet.getSheetByName () == "Gradutating пожилых"; целевая переменная = targetSheet.getRange (targetSheet. getLastRow () + 1, 1); s.getRange (строка, 1, 1, numColumns) .copyTo (мишень); } Если (s.getName () == "(не Actives в ожидании завершения / отставки)" && r.getColumn () == 4 && r.getValue () == "grad5") {вар строка = r.getRow () ; вар numColumns = s.getLastColumn (); вар targetSheet = sheet.getSheetByName () == "Пятый год пожилых людей"; целевая переменная = targetSheet.getRange (targetSheet.getLastRow () + 1, 1); s.getRange (строка, 1, 1, numColumns) .copyTo (мишень); }} getSheetByName () == "Пятый год пожилых"; целевая переменная = targetSheet.getRange (targetSheet.getLastRow () + 1, 1); s.getRange (строка, 1, 1, numColumns) .copyTo (мишень); }} getSheetByName () == "Пятый год пожилых"; целевая переменная = targetSheet.getRange (targetSheet.getLastRow () + 1, 1); s.getRange (строка, 1, 1, numColumns) .copyTo (мишень); }}
Elizabeth Furtado
1

голосов
2

ответ
256

Просмотры

Google-приложения-скрипт генератор случайной ссылки

У меня есть проблема под рукой, что я не могу сообразить сам. Для того, чтобы написать диссертацию мне нужно сделать обследование. Больше precisley: Мне нужен один для моего контроля и один для моей группы лечения. I'm с помощью формы Google. Я не мог найти способ Рандомайза разделов в самых формах, так что я посмотрел на редакторе сценариев. Я пытаюсь выяснить, есть ли способ иметь две формы, которые будут рандомизированы на участника, при нажатии на ссылку. Я думал, что-то вроде: функция random_2 () {вар myrandom = Math.round (Math.random ()) вар link1 = "http://www.google1.com" вар link2 = "HTTP: //www.google2. ком», если (myrandom == 0) window.location = link1 еще если (myrandom == 1) window.location = link2} Проблема я очень unexpirienced в кодировании и, кажется, до сих пор никто не хотел сделать такую ​​вещь! Но должна быть простой способ сделать это. Я бы очень признателен за любой вклад! Спасибо.
TizianPro
1

голосов
1

ответ
95

Просмотры

Permissions error when retrieving Coursework resource from Google Classroom as a Domain Admin

У меня есть сценарий Google, чтобы получить список всех Классные Google в нашей области образова вместе со всеми заданиями ( «Курсовая») в каждом классе. Запуск этого как администратора домена Google, я могу получить список классов, но пытается получить список заданий результатов в «вызывающий абонент не имеет разрешения» ошибка. У администраторов доменов Google не имеют права, чтобы получить список назначений? Нужно ли мне включить какой специальный метод аутентификации здесь? Функция listCourses () {вар optionalArgs = {PAGESIZE: 20}; ответ вар = Classroom.Courses.list (optionalArgs); вар курсы = response.courses; если (курсы && courses.length> 0) {для (я = 0; я <courses.length, я ++) {вар курс = курсы [я]; Logger.log ( '% s,% s,% s,% S', course.name, course.id, course.ownerId, course.creationTime); вар ID = course.id; // ошибка «абонент не имеет разрешения» происходит здесь: вар курсовую = Classroom.Courses.CourseWork.list (идентификатор) вар обр = []; если (курсовой && coursework.length> 0) {для (к = 0; к <coursework.length; K ++) {вар = CW курсовой [к]; вар Идентификаторы = cw.id; вар пользователь = cw.creatorUserId; тип переменная = cw.workType; вар ти = cw.title; вар дез = cw.description; вар й = cw.state; вар СЧ = cw.scheduledTime; вар из-за = cw.dueDate; Logger.log ( '% s, (% s),% s,% s', пользователь, Ti, дез, из-за); }}}}} вар = Classroom.Courses.CourseWork.list курсовых (ID) вар обр = []; если (курсовой && coursework.length> 0) {для (к = 0; к <coursework.length; K ++) {вар = CW курсовой [к]; вар Идентификаторы = cw.id; вар пользователь = cw.creatorUserId; тип переменная = cw.workType; вар ти = cw.title; вар дез = cw.description; вар й = cw.state; вар СЧ = cw.scheduledTime; вар из-за = cw.dueDate; Logger.log ( '% s, (% s),% s,% s', пользователь, Ti, дез, из-за); }}}}} вар = Classroom.Courses.CourseWork.list курсовых (ID) вар обр = []; если (курсовой && coursework.length> 0) {для (к = 0; к <coursework.length; K ++) {вар = CW курсовой [к]; вар Идентификаторы = cw.id; вар пользователь = cw.creatorUserId; тип переменная = cw.workType; вар ти = cw.title; вар дез = cw.description; вар й = cw.state; вар СЧ = cw.scheduledTime; вар из-за = cw.dueDate; Logger.log ( '% s, (% s),% s,% s', пользователь, Ti, дез, из-за); }}}}} creatorUserId; тип переменная = cw.workType; вар ти = cw.title; вар дез = cw.description; вар й = cw.state; вар СЧ = cw.scheduledTime; вар из-за = cw.dueDate; Logger.log ( '% s, (% s),% s,% s', пользователь, Ti, дез, из-за); }}}}} creatorUserId; тип переменная = cw.workType; вар ти = cw.title; вар дез = cw.description; вар й = cw.state; вар СЧ = cw.scheduledTime; вар из-за = cw.dueDate; Logger.log ( '% s, (% s),% s,% s', пользователь, Ti, дез, из-за); }}}}}
Duane
1

голосов
1

ответ
47

Просмотры

Google сценарий - Показать конкретный лист для пользователей

У меня есть Google Script, который позволяет пользователю перемещаться по электронной таблице, благодаря изображениям со скриптом отведенных им. Однако, так как через несколько дней, функция не работает должным образом. Указанная функция: функция switchToDowntime () {spreadsheet.setActiveSheet ( «БАЛАНС ЗДЕСЬ»)}, где электронная таблица SpreadsheetApp.getActiveSpreadsheet () Эта функция используется для работы, я считаю. Теперь, он просто работает и ничего не делает. Не изменяет текущий диапазон, или отображать правый лист. Если кто-то может помочь, это было бы здорово.
Mlemort
1

голосов
1

ответ
92

Просмотры

Ошибка при попытке установить Google Формы викторины счет

Я пытаюсь изменить класс ответа на основе его ответа. Вот код, я использую: Функция туРипсЫоп () {вар форма = FormApp.openById ( «formID123456»); // Для вопроса с вариантами: «1», «2», «3» и «4», // начислять баллы за ответы, которые коррелируют с их ответами. вар formResponses = FormApp.getActiveForm () getResponses (). // Переход через каждый ответ формы для (вар я = 0; я <formResponses.length; я ++) {ответ вар = formResponses [I]; вар товар = FormApp.getActiveForm () GetItems ().; // Предположим, что это первый пункт пункт вар = пункты [0]; вар itemResponse = response.getGradableResponseForItem (пункт); // Задаем 4 очка за "4". если (itemResponse! = NULL && itemResponse.getResponse () == '4') {вар баллов = пункт. asScaleItem () getPoints (). itemResponse.setScore (точки == 4); } // Дайте 3 очка за "3". иначе если (itemResponse = NULL && itemResponse.getResponse () == '3') {вар баллов = item.asScaleItem () getPoints (). itemResponse.setScore (точки == 3); } // Дайте 2 очка за "2". иначе если (itemResponse = NULL && itemResponse.getResponse () == '2') {вар баллов = item.asScaleItem () getPoints (). itemResponse.setScore (точки == 2); } // Дайте 1 очки за "1". иначе если (itemResponse = NULL && itemResponse.getResponse () == '1') {вар баллов = item.asScaleItem () getPoints (). itemResponse.setScore (точки == 1); // Это экономит класс, но не представляет формы еще. ответ. withItemGrade (itemResponse); }} // Сорта фактически представлены Формы здесь. FormApp.getActiveForm () submitGrades (formResponses). } Это возвращает ошибку: К сожалению, произошла ошибка сервера. Пожалуйста, подождите немного и повторите попытку. (Строка 23, файл «Код») Казалось бы, это была проблемы изменения оценки ответа, но он не возвращает конкретную ошибку, поэтому я попытался выделить ту часть, которая изменяет счет. Здесь, сценарий пытается изменить только счет ответа. Функция туРипсЫоп () {вар форма = FormApp.openById ( 'formID123456'); вар formResponses = FormApp.getActiveForm () getResponses (). // Переход через каждый ответ формы для (вар я = 0; я <formResponses.length; я ++) {ответ вар = formResponses [I]; вар товар = FormApp.getActiveForm () GetItems ().; // Предположим, что это» с первым пунктом вар пункт = деталь [0]; вар itemResponse = response.getGradableResponseForItem (пункт); . // Установка Оценка 3 вар точек = item.asScaleItem () getPoints (); itemResponse.setScore (точки == 3); }} Опять же, он вернулся и ту же ошибку, что подтверждает мои подозрения. Почему я с этой проблемой и как я могу это исправить? Любая помощь приветствуется. Спасибо!
Matthew Eng

Просмотр дополнительных вопросов