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 ответов

66 просмотров

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

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

+ мне нужно логиниться не из гугл скриптов, а с 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 и делать остальные действия он по пунктам провёл меня и я доискивал по ходу дела информацию в доке и ютубе (с сервисным аккаунтом и прочим)

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта