169 похожих чатов

Const sheets_api_url = 'https://sheets.googleapis.com/v4/spreadsheets'; /* ValueRenderOption Determines how values should be rendered in

the output.

Enums
FORMATTED_VALUE Values will be calculated & formatted in the reply according to the cell's formatting. Formatting is based on the spreadsheet's locale, not the requesting user's locale. For example, if A1 is 1.23 and A2 is =A1 and formatted as currency, then A2 would return "$1.23".
UNFORMATTED_VALUE Values will be calculated, but not formatted in the reply. For example, if A1 is 1.23 and A2 is =A1 and formatted as currency, then A2 would return the number 1.23.
FORMULA Values will not be calculated. The reply will include the formulas. For example, if A1 is 1.23 and A2 is =A1 and formatted as currency, then A2 would return "=A1".

---

DateTimeRenderOption
Determines how dates should be rendered in the output.

Enums
SERIAL_NUMBER Instructs date, time, datetime, and duration fields to be output as doubles in "serial number" format, as popularized by Lotus 1-2-3. The whole number portion of the value (left of the decimal) counts the days since December 30th 1899. The fractional portion (right of the decimal) counts the time as a fraction of the day. For example, January 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30st 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be 33.625. This correctly treats the year 1900 as not a leap year.
FORMATTED_STRING Instructs date, time, datetime, and duration fields to be output as strings in their given number format (which is dependent on the spreadsheet locale).
*/

function get(id, range, valueRenderOption) {

let get_params = '/' + id + '/values/' + encodeURIComponent(range) + '?'
+ '&valueRenderOption=' + (valueRenderOption ? valueRenderOption : 'FORMATTED_VALUE')
+ '&dateTimeRenderOption=SERIAL_NUMBER'
// + '&majorDimension=ROWS'

let api_url = sheets_api_url + get_params;
let params = {
method: "GET",
muteHttpExceptions: true,
headers: {
Authorization: "Bearer " + ScriptApp.getOAuthToken(),
'Accept': "application/json;"
}
};
return wrapp(api_url, params, id, range);
}

function update(id, range, values) {
let get_params = '/' + id + '/values/' + encodeURIComponent(range)
+ '?valueInputOption=USER_ENTERED';

let api_url = sheets_api_url + get_params;

let data = {
'range': range,
'majorDimension': 'ROWS',
'values': values
};

let params = {
method: "PUT",
muteHttpExceptions: true,
contentType: 'application/json',
payload: JSON.stringify(data),
headers: {
Authorization: "Bearer " + ScriptApp.getOAuthToken(),
'Accept': "application/json;"
}
};

return wrapp(api_url, params, id, range);
}

function clear(id, range) {
let get_params = '/' + id + '/values/' + encodeURIComponent(range) + ":clear";
let api_url = sheets_api_url + get_params;
let params = {
method: "POST",
muteHttpExceptions: true,
headers: {
Authorization: "Bearer " + ScriptApp.getOAuthToken(),
'Accept': "application/json;"
}
};

return wrapp(api_url, params, id, range);
}

function retry(n, func, ...args) {
for (let i = 0; i < Math.min(n, 9); i++) {
try {
return func(...args)
} catch (e) {
Logger.log("Retry " + (i + 1) + " failed, waiting")
Logger.log(e)
Utilities.sleep(2 ** i * 1000)
}
}
throw "Number of tries exceeded, aborting"
}

function wrapp(api_url, params, id, range) {

const wrapper = _ => {
response = UrlFetchApp.fetch(api_url, params);
console.log(response);
response = JSON.parse(response);
if (!response.hasOwnProperty('range') && !response.hasOwnProperty('spreadsheetId')) {
throw JSON.stringify(response)
}
return response
}
var response = retry(3, wrapper)
console.log(['success ', id, range])
return response.values;
}

9 ответов

32 просмотра

весь текст одного из файлов собиратора сюда кидать не нужно

но перед моими глазами такая картина

+ мне нужно логиниться не из гугл скриптов, а с node.js через импорт модуля googleapis и я за вечерок с чатиком и докой шустренько накидал телеграм бота, который парсит мне мою табличку товаров и выдаёт в телеграм сообщение по товарам также в процессе узнал прикол, хотя наверняка все знают это, что можно как бы транспонировать данные, выдавать двумерный массив как по строкам [[1,2,3],["яблоко","груша","лимон"]] так и по столбцам [[1,"яблоко"],[2,"груша"],[3,"лимон"]] хотя даже не задумывался что это возможно

Олександр Технічний відділ S-M
+ мне нужно логиниться не из гугл скриптов, а с no...

Написать в гугле node js + sheets api уже предлагали? Это будет даже проще, чем код в собираторе, можно будет использовать существующую библиотеку. В гас мы ограничены тем, что библиотек почти нет и все пишется руками под задачу (для тех же телеграм ботов), а вот во взрослом программировании этой проблемы уже не стоит)

Eugeny Namokonov
Написать в гугле node js + sheets api уже предлага...

Только для тг ботов как минимум пару либ знаю

Олександр Технічний відділ S-M
+ мне нужно логиниться не из гугл скриптов, а с no...

но суть разговора в чём я с чат gpt с нулём знаний разобрался как обращаться sheets api через node.js и делать остальные действия он по пунктам провёл меня и я доискивал по ходу дела информацию в доке и ютубе (с сервисным аккаунтом и прочим)

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
10
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
Изменение типа с SomeException на String и правда удобней @cheese_hs . А вот такой вариант насколько некрасив еще? loadConfigDB :: IO (Either String ConfigDataBase) loadConfi...
Camara
7
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта