Листы(вкладки) Google-таблиц

TommyGun

Client
Регистрация
26.02.2024
Сообщения
5
Благодарностей
0
Баллы
1
Добрый день
Второй день мучает вопрос как перебирать в гугл таблице отдельные листы.
В моём шаблоне парсятся данные и заливаются в гугл таблицу отдельно в каждый лист. Проблема в том, что руками через Привязку к url не канает, потому что листов может быть 100+. Надо организовать перебор каждого листа по отдельности. Грубо говоря нужно извлечь с таблицы все ссылки на каждую из страниц и положить их в список или переменную, чтобы потом по одной ссылке перебирать через Привязку к url
За google api знаю, перечитал весь форум, нашел только древние посты двух решений - через обработку json (access токены и т.д.) и эту тему 2018 года где идут танцы с бубном через visual Studio и не понятно что куда клацать
В итоге рабочего актуального решения я не нашёл.
Прошу помочь.
 

Ахилес

Client
Read only
Регистрация
11.11.2020
Сообщения
956
Благодарностей
392
Баллы
63
привязал к url , поработал, привязал к другому... и так в цикле все страницы перебрал.
 

TommyGun

Client
Регистрация
26.02.2024
Сообщения
5
Благодарностей
0
Баллы
1
привязал к url , поработал, привязал к другому... и так в цикле все страницы перебрал.
Спасибо за ответ, но это и так понятно либо меня не так поняли )
Я имею ввиду, что не предусмотрено забивать в ручную каждый урл на вкладку в список или в переменную, потому что урлов (страниц) может быть очень много и это не удобно, поэтому я ищу решение для того, чтобы шаблон при выполнении извлекал все текущие ссылки на страницы и кидал их например в переменную, чтобы потом выполнялся как раз таки перебор тот самый в цикле)
 

Ахилес

Client
Read only
Регистрация
11.11.2020
Сообщения
956
Благодарностей
392
Баллы
63
Спасибо за ответ, но это и так понятно либо меня не так поняли )
Я имею ввиду, что не предусмотрено забивать в ручную каждый урл на вкладку в список или в переменную, потому что урлов (страниц) может быть очень много и это не удобно, поэтому я ищу решение для того, чтобы шаблон при выполнении извлекал все текущие ссылки на страницы и кидал их например в переменную, чтобы потом выполнялся как раз таки перебор тот самый в цикле)
так и не вбивай вручную... есть же кубик привязки URL к таблице. вот им и пользуйся. в цикле.
 

TommyGun

Client
Регистрация
26.02.2024
Сообщения
5
Благодарностей
0
Баллы
1
так и не вбивай вручную... есть же кубик привязки URL к таблице. вот им и пользуйся. в цикле.
Снова не понял меня)
кубик привязки URL к таблице не даёт возможности извлекать ссылки на уже существующие листы. Я знаю, что я могу создать лист с помощью этого кубика и положить урл этого листа в переменную, но мне не нужно создавать новый лист, мне нужно ИЗВЛЕКАТЬ все урлы уже существующих листов.
Надеюсь теперь понятно)
 

Ахилес

Client
Read only
Регистрация
11.11.2020
Сообщения
956
Благодарностей
392
Баллы
63
Снова не понял меня)
кубик привязки URL к таблице не даёт возможности извлекать ссылки на уже существующие листы. Я знаю, что я могу создать лист с помощью этого кубика и положить урл этого листа в переменную, но мне не нужно создавать новый лист, мне нужно ИЗВЛЕКАТЬ все урлы уже существующих листов.
Надеюсь теперь понятно)
а чем URL листов в одном документе отличаются ?
 

TommyGun

Client
Регистрация
26.02.2024
Сообщения
5
Благодарностей
0
Баллы
1

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 241
Благодарностей
573
Баллы
113
Такого функицонала в постере не предусмотрено.
 

TommyGun

Client
Регистрация
26.02.2024
Сообщения
5
Благодарностей
0
Баллы
1
Такого функицонала в постере не предусмотрено.
Стандартными экшенами понятно, что нет
Но есть C# код на подобии этого:

Авторизация:
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using System.Threading;

UserCredential credential;
using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
    string credPath = "token.json";
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        new[] { SheetsService.Scope.Spreadsheets },
        "user",
        CancellationToken.None,
        new FileDataStore(credPath, true)).Result;
}

// Создаем объект сервиса Google Sheets API
var service = new SheetsService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "Zennoposter",
});
Идёт авторизация, после еще кусок кода для извлечения всех урлов страниц и добавления в переменную
Типо такого:
// Обработайте список листов и извлеките их ссылки и названия
var sheetLinks = new List<string>();
var sheetNames = new List<string>();
foreach (var sheet in sheets)
{
    // Сформируйте ссылку на текущий лист в таблице
    var sheetLink = $"https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit#gid={sheet.SheetId}";

    // Добавьте ссылку и название листа в соответствующие списки
    sheetLinks.Add(sheetLink);
    sheetNames.Add(sheet.Title);
}

Но какие варианты я не пробовал пихать в с# кубик вечно ошибки сыпет. Уже и директивы добавлял в using и библиотеки dll google.api и другие
 

Ахилес

Client
Read only
Регистрация
11.11.2020
Сообщения
956
Благодарностей
392
Баллы
63
ну тебе либо разбираться в гуглAPI, либо с найденной библиотекой...
или вот эту статью прочитать https://ru.extendoffice.com/documents/excel/5222-google-sheets-get-list-of-sheets.html возможно будет проще внедрить скрипт на отдельную страницу и парсить уже готовые данные.
правда, фиг знает что за задачи вообще стоят :bk:
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
737
Благодарностей
485
Баллы
63
Стандартными экшенами понятно, что нет
Но есть C# код на подобии этого:

Авторизация:
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using System.Threading;

UserCredential credential;
using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
    string credPath = "token.json";
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        new[] { SheetsService.Scope.Spreadsheets },
        "user",
        CancellationToken.None,
        new FileDataStore(credPath, true)).Result;
}

// Создаем объект сервиса Google Sheets API
var service = new SheetsService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "Zennoposter",
});
Попробуйте дальше вот это

C#:
// Получение списка листов из таблицы
SpreadsheetsResource.GetRequest request = service.Spreadsheets.Get(spreadsheetId);
Spreadsheet spreadsheet = request.Execute();
IList<Sheet> sheets = spreadsheet.Sheets;

// Перебор листов и вывод их названий
foreach (Sheet sheet in sheets)
{
    Console.WriteLine("Название листа: " + sheet.Properties.Title);
}

Console.ReadLine();

// Console заменить на project и вывести инфу в лог
 

vladkomp

Новичок
Регистрация
05.09.2021
Сообщения
3
Благодарностей
1
Баллы
3
Немного апну тему. При попытке работать с гугл таблицами посредством c# кода постоянно выдает такую ошибку:

Компиляция кода Ошибка в действии "CS0234" "Ошибка в директивах using. The type or namespace name 'Services' does not exist in the namespace 'Google.Apis' (are you missing an assembly reference?)". [Строка: 5; Cтолбец: 19]

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

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)