1 (изменено: belyankin12, 2016-12-29 12:20:51)

Тема: AHK: Работа с гугл-таблицами

Здравствуйте, форумчане. Суть в следующем: есть гугл-таблица которой я не владею, но у меня есть права редактирования. Гугл-таблица доступна для просмотра всем в интернете у кого есть ссылка. Мне нужно внести в таблицу несколько значений, как мне это сделать? Подойдут любые варианты: от работы через оффлайн-доступ, до прямого редактирования.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

2

Re: AHK: Работа с гугл-таблицами

как мне это сделать

А почему бы для начала не прочитать правила форума/ветки?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Работа с гугл-таблицами

А почему бы не выключить режим сарказма а указать на ошибку конкретно? Перечитал правила (что делал и перед созданием), название правильное, предложения разделены и более-менее грамотны.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

4

Re: AHK: Работа с гугл-таблицами

Обратите внимание на оформление заголовков.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: belyankin12, 2016-12-25 20:31:27)

Re: AHK: Работа с гугл-таблицами

Так бы и сразу, сейчас изменю, спасибо за замечание.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

6

Re: AHK: Работа с гугл-таблицами

Так же требуются точки в конце предложений.

belyankin12 пишет:

Перечитал правила

Начинаю в этом сомневаться.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Работа с гугл-таблицами

https://developers.google.com/sheets/api/

8

Re: AHK: Работа с гугл-таблицами

Спасибо большое, но есть ли что-то на русском?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

9

Re: AHK: Работа с гугл-таблицами

Сомневаюсь.
Технический английский, конечно, стоит подучить.

10

Re: AHK: Работа с гугл-таблицами

Что-ж, будем пытаться с помощью переводчика. Но если кто-то из пользователей пожелает мне скинуть пример простейшего кода редактирования, будет намного лучше. Спасибо за помощь и на том!

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

11 (изменено: belyankin12, 2016-12-27 14:01:54)

Re: AHK: Работа с гугл-таблицами

Все таки мне трудно разобраться в том API, мой английский оставляет желать лучшего. Да и в языках программирования знаний у меня не так много: меня всегда кто-то учил . В общем я нашел другой способ: мне кажется он проще, но я не понимаю все равно как заставить скрипт обратится к веб-приложению. Вот ссылка на пост, который меня вдохновил ко всему этому: https://habrahabr.ru/sandbox/46965/. Для обращения скрипта к веб-приложению (код, указанный на сайте работает до 7-й строчки: там нету параметров p1 и p2, которые нужно указать в ссылке, как я понял. Но через браузер напрямую не работает), я использую следующий код, но к сожалению в таблице ничего не меняется:


query := "p1=123&p2=233"
url := "https://script.google.com/macros/s/AKfycbyfg6RO8K594sUlDmq2zUtY2ixm-rLgB9AVrv9KUAownoLk4NF4/exec?" . query . ""
whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
whr.Open("GET", url, true)
whr.Send()

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

И ещё один вопрос, возможно не по теме, простите меня за это тогда и укажите на ошибку. Тот код веб-приложения, что указан на сайте, это какой язык программирования, чтобы я знал на какой форум обращаться за помощью?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

12 (изменено: Malcev, 2016-12-27 16:56:29)

Re: AHK: Работа с гугл-таблицами

Все таки мне трудно разобраться в том API

Смысл такой  - надо аутентифицироваться через OAuth2:
https://developers.google.com/adwords/a … tion?hl=ru
https://habrahabr.ru/post/145988/
И потом через Get/Post/Put запросы получать, добавлять, изменять контент.

Тот код, что на сайте у меня работает.
Делал по шагам то, что написано там.

Тот код веб-приложения, что указан на сайте, это какой язык программирования

Там же написано:

Для этого воспользуемся Google App Script

13

Re: AHK: Работа с гугл-таблицами

Решил проблему с помощью веб-приложения-макросса. Нужно было написать макросс на яваскрипт и потом get запрос его запустить. Если нужно, могу скинуть коды сюда.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

14

Re: AHK: Работа с гугл-таблицами

Пользователь, что мне отправил сообщение в ЛС (я узнал о нем благодаря почтовому роботу), я не знаю как отправлять сообщения в ЛС, потому скину все это сюда)).

Код веб-приложения-макросса:


function doGet(e)
{
  var sheet = SpreadsheetApp.openById("ссылка гугл таблицы");
  var d = new Date(), params = e.parameter;
  sheet.appendRow( ["", "", params["nick"], transliterate(params["reason"], true), params["source"]] ); // добавить новую строку ( ["¤чейка1", "¤чейка2", "¤чейка3", ...] )
}

transliterate = (
	function() {
		var
			rus = "щ ш ч ц ю ¤ Є ж ъ ы э а б в г д е з и й к л м н о п р с т у ф х ь".split(/ +/g),
			eng = "[[shh]] [[sh]] [[ch]] [[cz]] [[yu]] [[ya]] [[yo]] [[zh]] [[``]] [[y']] [[e`]] [[a]] [[b]] [[v]] [[g]] [[d]] [[e]] [[z]] [[i]] [[j]] [[k]] [[l]] [[m]] [[n]] [[o]] [[p]] [[r]] [[s]] [[t]] [[u]] [[f]] [[x]] [[`]]".split(/ +/g)
		
		return function(text, engToRus) {
			var x;
			for(x = 0; x < rus.length; x++) {
				text = text.split(engToRus ? eng[x] : rus[x]).join(engToRus ? rus[x] : eng[x]);
				text = text.split(engToRus ? eng[x].toUpperCase() : rus[x].toUpperCase()).join(engToRus ? rus[x].toUpperCase() : eng[x].toUpperCase());	
			}
			return text;
		}
	}
)();

Основной код это первые четыре строчки, дальше идёт преобразование с транслита в русский текст (если напрямую кидать русский текст в параметры выходят иероглифы).

Код AHK:


url := "ссылка на веб-приложение/exec?nick=" var "&source="var "&reason=" translit(var)
		whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
		whr.Open("GET", url, true)
		whr.Send()

Код преобразования в транслит:


translit(repstr)
{
	StringReplace, repstr, repstr, а , [[a]] , All
	StringReplace, repstr, repstr, б , [[b]] , All
	StringReplace, repstr, repstr, в , [[v]] , All
	StringReplace, repstr, repstr, г , [[g]] , All
	StringReplace, repstr, repstr, д , [[d]] , All
	StringReplace, repstr, repstr, е , [[e]] , All
	StringReplace, repstr, repstr, ё , [[yo]] , All
	StringReplace, repstr, repstr, ж , [[zh]] , All
	StringReplace, repstr, repstr, з , [[z]] , All
	StringReplace, repstr, repstr, и , [[i]] , All
	StringReplace, repstr, repstr, й , [[j]] , All
	StringReplace, repstr, repstr, к , [[k]] , All
	StringReplace, repstr, repstr, л , [[l]] , All
	StringReplace, repstr, repstr, м , [[m]] , All
	StringReplace, repstr, repstr, н , [[n]] , All
	StringReplace, repstr, repstr, о , [[o]] , All
	StringReplace, repstr, repstr, п , [[p]] , All
	StringReplace, repstr, repstr, р , [[r]] , All
	StringReplace, repstr, repstr, с , [[s]] , All
	StringReplace, repstr, repstr, т , [[t]] , All
	StringReplace, repstr, repstr, у , [[u]] , All
	StringReplace, repstr, repstr, ф , [[f]] , All
	StringReplace, repstr, repstr, х , [[x]] , All
	StringReplace, repstr, repstr, ц , [[cz]] , All
	StringReplace, repstr, repstr, ч , [[ch]] , All
	StringReplace, repstr, repstr, ш , [[sh]] , All
	StringReplace, repstr, repstr, щ , [[shh]] , All
	StringReplace, repstr, repstr, ъ , [[````]] , All
	StringReplace, repstr, repstr, ы , [[y']] , All
	StringReplace, repstr, repstr, ь , [[``]] , All
	StringReplace, repstr, repstr, э , [[e``]] , All
	StringReplace, repstr, repstr, ю , [[yu]] , All
	StringReplace, repstr, repstr, я , [[ya]] , All

	StringReplace, repstr, repstr, А , [[A]] , All
	StringReplace, repstr, repstr, Б , [[b]] , All
	StringReplace, repstr, repstr, В , [[V]] , All
	StringReplace, repstr, repstr, Г , [[G]] , All
	StringReplace, repstr, repstr, Д , [[D]] , All
	StringReplace, repstr, repstr, Е , [[E]] , All
	StringReplace, repstr, repstr, Ё , [[YO]] , All
	StringReplace, repstr, repstr, Ж , [[ZH]] , All
	StringReplace, repstr, repstr, З , [[Z]] , All
	StringReplace, repstr, repstr, И , [[i]] , All
	StringReplace, repstr, repstr, Й , [[J]] , All
	StringReplace, repstr, repstr, К , [[K]] , All
	StringReplace, repstr, repstr, Л , [[L]] , All
	StringReplace, repstr, repstr, М , [[M]] , All
	StringReplace, repstr, repstr, Н , [[N]] , All
	StringReplace, repstr, repstr, О , [[O]] , All
	StringReplace, repstr, repstr, П , [[P]] , All
	StringReplace, repstr, repstr, Р , [[R]] , All
	StringReplace, repstr, repstr, С , [[S]] , All
	StringReplace, repstr, repstr, Т , [[T]] , All
	StringReplace, repstr, repstr, У , [[u]] , All
	StringReplace, repstr, repstr, Ф , [[F]] , All
	StringReplace, repstr, repstr, Х , [[X]] , All
	StringReplace, repstr, repstr, Ц , [[CZ]] , All
	StringReplace, repstr, repstr, Ч , [[CH]] , All
	StringReplace, repstr, repstr, Ш , [[SH]] , All
	StringReplace, repstr, repstr, Щ , [[SHH]] , All
	StringReplace, repstr, repstr, Ъ , [[````]] , All
	StringReplace, repstr, repstr, Ы , [[Y']] , All
	StringReplace, repstr, repstr, Ь , [[``]] , All
	StringReplace, repstr, repstr, Э , [[E``]] , All
	StringReplace, repstr, repstr, Ю , [[YU]] , All
	StringReplace, repstr, repstr, Я , [[YA]] , All
	
	return repstr
}

Параметры (var) выведите сами уже.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

15

Re: AHK: Работа с гугл-таблицами

если напрямую кидать русский текст в параметры выходят иероглифы

Через браузер тоже?

16

Re: AHK: Работа с гугл-таблицами

Через браузер нет.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

17

Re: AHK: Работа с гугл-таблицами

Кодируйте передаваемые параметры (будет работать на ahk 32bit):

UriEncode(Uri)
{
    oSC := ComObjCreate("ScriptControl")
    oSC.Language := "JScript"
    Script := "var Encoded = encodeURIComponent(""" . Uri . """)"
    oSC.ExecuteStatement(Script)
    Return, oSC.Eval("Encoded")
}

18

Re: AHK: Работа с гугл-таблицами

Malcev пишет:

будет работать на ahk 32bit

Зачем, есть же универсальный вариант:

URIEncode(str, encoding := "UTF-8")
{
   PrevFormat := A_FormatInteger
   SetFormat, IntegerFast, H

   VarSetCapacity(var, StrPut(str, encoding))
   StrPut(str, &var, encoding)

   While code := NumGet(Var, A_Index - 1, "UChar")
   {
      bool := (code > 0x7F || code < 0x30 || code = 0x3D)
      UrlStr .= bool ? "%" . SubStr("0" . SubStr(code, 3), -1) : Chr(code)
   }
   SetFormat, IntegerFast, % PrevFormat
   Return UrlStr
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19 (изменено: Bamboocho, 2017-07-20 19:16:28)

Re: AHK: Работа с гугл-таблицами

belyankin12, сделал все, как вы написали (макрос), но остался вопрос: как сделать так, чтобы скрипт заносил информацию не в первый лист, а в следующий и, желательно, с возможностью выбора листа?

20 (изменено: belyankin12, 2017-07-20 20:05:19)

Re: AHK: Работа с гугл-таблицами

Bamboocho, это уже не распространяется на этот форум. Нужно изучать google apps script как отдельный язык. Вот тут помощь: https://plus.google.com/communities/110 … 8085680190. А вот тут классы и функции: https://developers.google.com/apps-scri … preadsheet. Есть функция выбора листа по имени, цвету, номеру, но я давно использовал её, не помню уже, ищите.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

21

Re: AHK: Работа с гугл-таблицами

Добрый день.

Со времен последнего ответа по теме, видимо, гугл прикрыли возможность приложениям без авторизации отправлять гет запросы на app script.

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

Или подскажите как приложению на ахк правильно авторизоваться, чтобы его запрос принял google app script.

Заранее благодарен.

22 (изменено: teadrinker, 2019-12-14 04:17:04)

Re: AHK: Работа с гугл-таблицами

Для чтения таблиц нужно получить ключ:

1) Авторизоваться в Google
2) Зайти на https://console.developers.google.com/
3) Создать новый проект
4) Перейти в библиотеку API
5) Найти Google Sheets API, включить
6) Перейти на вкладку Учетные данные (слева)
7) Кнопка Создать учетные данные —> Ключ API
8) Скопировать, закрыть (Применять ограничения ключа не нужно)
Этот ключ будет использоваться для чтения таблицы в скрипте.

Google Sheets API:
⚪ Зайти на https://developers.google.com/sheets/ap … ?apix=true
⚪ Кликнуть по нужному методу, откроется редактор
⚪ Ввести нужные данные, запустить
⚪ Скопировать сформированный URL, который потом можно использовать в скрипте

Справка по чтению данных из таблицы:
https://developers.google.com/sheets/ap … es/reading

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

23

Re: AHK: Работа с гугл-таблицами

Спасибо за оперативный ответ в три часа ночи. Ушел разбираться

24

Re: AHK: Работа с гугл-таблицами

Для себя когда-то писал. Может, сейчас там изменилось что-то.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

25

Re: AHK: Работа с гугл-таблицами

Может отсюда информация пригодится:
http://forum.script-coding.com/viewtopic.php?id=14569

26 (изменено: belyankin12, 2019-12-16 22:15:56)

Re: AHK: Работа с гугл-таблицами

Подождите ка через API? У меня до сих пор работает авторизация скриптов через анонимные запросы (правда на lua, АХК давненько не использовал). Или это только потому что приложение было создано давно?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

27

Re: AHK: Работа с гугл-таблицами

Кто его знает, может вы какую-то секретную технику используете.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

28

Re: AHK: Работа с гугл-таблицами

Собственно, вот: создал новенькую таблицу. Это код на АХК:



msgbox, % RegExMatch(httprequest("https://script.google.com/macros/s/AKfycbxREFHUJxV-et-c0CKpLO1bWx2LHY_eCUvhWDCzSfs0aNXbkNE/exec"), "Hello, world")

HttpRequest(HttpRequestUrl, delay := 15) { ; выполняет HTTP запрос
    ComObjError(false)
	whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
	whr.Open("GET", HttpRequestUrl, true)
	whr.Send()
	whr.WaitForResponse(delay)
    rt := whr.ResponseText
    IniWrite, %rt%, %Dir%\Cache\HTTPRequest\History.ini, %A_DD%.%A_MM%.%A_YYYY% %A_Hour%:%A_Min%:%A_Sec%, RequestText
	return, % whr.ResponseText
}

Код в таблице:

function doGet(e) {
  return HtmlService.createHtmlOutput("Hello, world");
}

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

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.