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

64 просмотра

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

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

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта