Как получить все названия вкладок / gid с помощью google.visualization из электронной таблицы Google? - PullRequest
1 голос
/ 27 января 2020

Я могу получить все данные из таблицы вкладок, используя sheet = Jan24_12pm , но не могу узнать, как получить все имена вкладок или названия таблиц? В этом примере есть 11 вкладок / листов

function drawChart() {
var query = new google.visualization.Query('https://docs.google.com/spreadsheets/d/169AP3oaJZSMTquxtrkgFYMSp4gTApLTTWqo25qCpjL0/gviz/tq?sheet=Jan24_12pm&tq=select%20*');
                query.send(drawTable);
            }

UPD: Я не владелец и документ не опубликован"Приносим извинения. Это документ не опубликован ". Но я могу получить к нему доступ с помощью google.visualization.Query

Спасибо

Ответы [ 3 ]

3 голосов
/ 28 января 2020
  • Вы хотите получить все имена листов в электронной таблице без ключа API и маркера доступа.
  • В вашей ситуации электронная таблица является общедоступной.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Шаблон 1:

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

Использование:

1. Создайте новый проект скрипта Google Apps.

Пример скрипта для веб-приложений - это скрипт Google Apps. Поэтому, пожалуйста, создайте проект Google Apps Script.

Если вы хотите создать его напрямую, перейдите к https://script.new/. В этом случае, если вы не вошли в Google, откроется экран входа. Пожалуйста, войдите в Google. При этом открывается редактор сценариев Google Apps Script.

2. Скопируйте и вставьте скрипт.

Пожалуйста, скопируйте и вставьте следующий скрипт.

function doGet(e) {
  var spreadsheetId = e.parameter.id;
  var sheets = SpreadsheetApp.openById(spreadsheetId).getSheets();
  var sheetNames = sheets.map(function(e) {return e.getSheetName()});
  return ContentService.createTextOutput(JSON.stringify({sheetNames: sheetNames})).setMimeType(ContentService.MimeType.JSON);
}

3. Развертывание веб-приложений.

  1. В редакторе сценариев откройте диалоговое окно с помощью «Publi sh» -> «Развернуть как веб-приложение».
  2. Выберите «Me « для » Запустите приложение как: «.
  3. Выберите « Любой, даже анонимный » для « У кого есть доступ к приложению: «.
  4. Нажмите кнопку« Развернуть »как новую« Версия проекта ».
  5. Автоматически откройте диалоговое окно« Требуется авторизация ».
    1. Нажмите «Просмотреть разрешения».
    2. Выберите собственную учетную запись.
    3. Нажмите «Дополнительно» в разделе «Это приложение не подтверждено».
    4. Нажмите " Go to ### имя проекта ### (небезопасно) "
    5. Нажмите кнопку" Разрешить ".
  6. Нажмите" ОК ".
  7. Скопируйте URL-адрес веб-приложений. Это как https://script.google.com/macros/s/###/exec.
    • Когда вы изменили скрипт Google Apps, пожалуйста, повторно разверните его как новую версию. Этим измененный сценарий отражается в веб-приложениях. Пожалуйста, будьте осторожны.

4. Пример сценария для вашего сценария.

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

var url = "https://script.google.com/macros/s/###/exec?id=169AP3oaJZSMTquxtrkgFYMSp4gTApLTTWqo25qCpjL0";
fetch(url)
.then(function(response) {
  return response.json();
})
.then(function(obj) {
  console.log(obj.sheetNames) // You can see the sheet names as an array.
});
  • Укажите URL-адрес Веб-приложения, найденные выше. В приведенном выше сценарии идентификатор таблицы отправляется с использованием параметра запроса.
  • В этом случае вы можете извлечь все имена листов без использования ключа API и маркера доступа.

Шаблон 2:

В этом шаблоне имена листов извлекаются путем публикации электронной таблицы в Интернете.

Использование:

1. Publi sh Spreadsheet to Web.

Пожалуйста, опубликуйте sh Spreadsheet to Web. Ссылка

2. Пример сценария для вашего сценария.

var url = "https://spreadsheets.google.com/feeds/worksheets/169AP3oaJZSMTquxtrkgFYMSp4gTApLTTWqo25qCpjL0/public/basic?alt=json";
fetch(url)
.then(function(response) {
  return response.json();
})
.then(function(obj) {
  const sheetNames = obj.feed.entry.map( e => e.title["$t"]);
  console.log(sheetNames) // You can see the sheet names as an array.
});
  • В этом случае все имена листов могут быть непосредственно получены из электронной таблицы. Но этот шаблон использует Sheets API v3. Так что теперь вы можете подтвердить, что все имена листов могут быть получены с помощью вышеуказанного сценария. Но Sheets API v3 закрывается 3 марта 2020 года . К сожалению, я не могу рекомендовать использовать этот шаблон. Кроме того, в Sheets API v4 токен доступа и / или ключ API требуются для извлечения значений из электронной таблицы. В этом случае я думаю, что ответ iamblichus подходит.

Ссылки:

Если я неправильно понял ваш вопрос, и это было не то направление, которое вы хотите, я прошу прощения.

3 голосов
/ 27 января 2020

Вы можете легко получить эту информацию с помощью Sheets API .

Просто позвоните spreadsheets.get и укажите свой spreadsheetId в качестве параметра. В качестве ответа вы получите ресурс электронной таблицы , который содержит поле с именем sheets, значением которого является массив с информацией о каждом листе. Внутри sheetProperties вы можете найти sheetId и title (название листа).

Ответ JSON будет выглядеть примерно так:

{
  "sheets": [
    {
      "properties": {
        "sheetId": "specific-sheet-id",
        "title": "specific-sheet-name",
        // ... rest of sheet properties
      },
      // ... rest of sheet fields
    },
    // ... rest of sheets
  ],
  // ... rest of spreadsheet fields
}

Ссылка :

Надеюсь, это поможет.

1 голос
/ 06 февраля 2020

Если вы просто хотите получить все вкладки в электронной таблице, следующий скрипт даст вам идентификатор электронной таблицы и список всех вкладок в электронной таблице. Идентификатор электронной таблицы для ссылки, которой вы поделились

https://docs.google.com/spreadsheets/d/ 1yZv9w9zRKwrGTaR-YzmAqMefw4wMlaXocejdxZaTs6w / htmlview? Usp = share & sle = true # (часть в bold) 1yZv9w9zRKwrGTaR-YzmAqMefw4wMlaXocejdxZaTs6w ).

Но он удален, поэтому новая ссылка https://docs.google.com/spreadsheets/d/ 1wQVypefm946ch4XDWH6HWHWHWHWHWHWT * Идентификатор: 1wQVypefm946ch4XDp37uZ-wartW4V7ILdg-qYiDXUHM.

function GetTabs(){
  var app = SpreadsheetApp;
  var ss = app.openById('1wQVypefm946ch4XDp37uZ-wartW4V7ILdg-qYiDXUHM');
  var name = ss.getName();
  Logger.log(name);
  var tabs = new Array()
  var sheets = ss.getSheets();
  for (var i=0 ; i<sheets.length ; i++) tabs.push( [ sheets[i].getName() ] )
  //return tabs  
  Logger.log(tabs)
}

Я протестировал и смог найти вкладки, вы можете просматривать их из журналов (Ctrl + Enter, когда в сценарии Google). По сути, скрипт вызывает электронную таблицу, используя ее идентификатор, а затем извлекает из нее все вкладки. Если вам потребуются какие-либо дополнительные изменения или я неправильно понял ваш вопрос, не стесняйтесь уточнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...