Различные URL-адреса для отдельных листов в одном документе - PullRequest
0 голосов
/ 23 июня 2019

Я хочу создать несколько отдельных URL (другими словами, конечных точек) для определенного листа в данном документе.У меня есть данные (не очень, около 200-250 строк).По сути, структура данных каждый год одинакова (идентификатор, страна, название, имя и т. Д.).Мне удалось преобразовать выбранные ячейки в правильный формат JSON и развернуть следующее как веб-приложение.

В настоящее время я использую метод doGet(), тело которого можно найти ниже.

Я пытался использовать официальную Документацию Google, но мне кажется, что я не до конца ее понимаю.

https://developers.google.com/apps-script/guides/web#url_parameters

function doGet(e) 
{
    var sheetName = "Lorem Ipsum";
    var sheetID = "SDJHFLKSDJFLJSD94UF940FUJ9FS90FJ049JW9F";
    var book = SpreadsheetApp.openById(sheetID);
    var sheet = book.getSheetByName(sheetName);
    var JSON = convertSheet2JsonText(sheet);
    return ContentService.createTextOutput(JSON.stringify(JSON)).setMimeType(ContentService.MimeType.JSON);
}

[
    {
        "ID": 1,
        "PUBLISHED": true,
        "NAME": "Lorem Ipsum",
        "TITLE": "Lorem Ipsum",
        "SOURCE": "Lorem Ipsum",
        "DATE": "14 June 2019",
        "COUNTRY": "Poland"
    },
    {
        "ID": 2,
        "PUBLISHED": false,
        "NAME": "Lorem Ipsum",
        "TITLE": "Lorem Ipsum",
        "SOURCE": "Lorem Ipsum",
        "DATE": "05 August 2019",
        "COUNTRY": "USA"
    }
]

По сути, сразу после развертывания я получаю ссылку,но он содержит данные только с одного листа, которому я предоставил удостоверение личности.Ожидаемый результат должен выглядеть следующим образом:

  • URL: ../macros/s/../exec/data-2018
  • URL: ../macros/s/../exec/data-2019
  • URL: ../macros/s/../exec/data-2020

1 Ответ

0 голосов
/ 23 июня 2019

Задача

К сожалению, WebApps, развернутые в инфраструктуре Google, не поддерживают маршрутизацию как таковую, вы получаете только один URL для каждого проекта, заканчивающегося /exec для производства и /dev для среды разработки соответственно.

Решение

К счастью, вы можете добавить строку запроса к этому URL, если вы хотите указать, какую функцию запустить / ID использовать и т. Д. Подумайте о doGet() / doPost() как маршрутизаторе в этот случай: /exec?param1=value1&param2=value2. Каждый параметр, передаваемый в строку запроса, будет удобно доступен из объекта события с помощью клавиши parameter или parameters.

Sample

Если я правильно вас понял, вы хотите направить WebApp по свойству sheetName, верно? Тогда ваш URL должен выглядеть как /exec?name=data-2018 (кстати, не забудьте правильно его закодировать, особенно если ваши имена содержат пробелы), и вы должны получить доступ к этому параметру в doGet:

function doGet(e) {
    var param     = e.parameter; //access query params;
    var sheetName = param.name;

    var sheetID = 'yourId';
    var book = SpreadsheetApp.openById(sheetID);
    var sheet = book.getSheetByName(sheetName);
    var JSON = convertSheet2JsonText(sheet);
    return ContentService.createTextOutput(JSON.stringify(JSON)).setMimeType(ContentService.MimeType.JSON);
}

Полезные ссылки

  1. Объект события структура (+ один из моих старых ответов );
  2. URL-кодировка ссылка ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...