Опубликована ссылка на скрипт Google с листом Google, возвращающим печать пустой переменной - PullRequest
1 голос
/ 20 февраля 2020

Поскольку я склонен бродить, сначала короткую версию, а если вам нужна дополнительная информация, прочитайте длинную.

TL; DR

Почему это так:


function doGet(e) {

var sheet = SpreadsheetApp.getActiveSheet();

var jobsCreated = sheet.getRange(12,2).getValue();

Browser.msgBox(jobsCreated);

var params = JSON.stringify({number:jobsCreated});

return ContentService.createTextOutput(params);

}

, возвращая это, когда я публиковал как веб-сайт, а затем открывал: {"number":""}

, когда это должно выглядеть примерно так {"number":2451}

Полная версия:

Во-первых, я научился программировать в универе для получения степени информатики (10 лет go), но с тех пор я мало занимался программированием, поэтому я в основном новичок ie.

Теперь к вопросу. У меня есть очень простой сценарий, созданный с помощью редактора сценариев из Google Sheets


function doGet(e) {

var sheet = SpreadsheetApp.getActiveSheet();

var jobsCreated = sheet.getRange(12,2).getValue();

Browser.msgBox(jobsCreated);

var params = JSON.stringify({number:jobsCreated});

return ContentService.createTextOutput(params);

}

Сначала я получаю лист, над которым работаю

Затем я выбираю ячейку из этого листа

Теперь, если я использую msgBox, чтобы убедиться, что у меня правильный номер, и запускаю скрипт, он работает и показывает сообщение.

затем я форматирую переменную как JSON и, наконец, я просто создаю текстовый вывод.

Теперь я развертываю как веб-приложение

  • Выполните как ME
  • Любой, даже анонимный

И когда я захожу на сайт, я вижу только это: {"number":""} Если я изменяю код и даю значения jobsCreated и stati c, он работает нормально

var jobsCreated = 100;
{"number":100}

Таким образом, мой вывод заключается в том, что проблема заключается в доступе к значению ячейки при запуске скрипта по опубликованной ссылке, сравнивая с запуском его непосредственно из редактора, но я понятия не имею, как это исправить .

Немного больше информации, я пытаюсь использовать это для счетчика под названием Smiirl, я получил большую часть информации отсюда https://medium.com/@m_nebra / bootstrapping-your-company-counter-22f5d4bc7dd4

Ответы [ 3 ]

0 голосов
/ 21 февраля 2020

Ваша проблема в использовании JSON.stringify

В JSON функции не допускаются как значения объекта.

Функция JSON.stringify() пропустит или изменит null любые функции из JavaScript объекта.

При этом вы можете сделать следующее:

function doGet(e){

  // Get the value of the range
  var sheet = SpreadsheetApp.getActiveSheet();
  var jobsCreated = sheet.getRange(12,2).getValue();

  // JSON Stringify it
  var params = JSON.stringify({"number" : number=jobsCreated});

  // Return JSON string
  return ContentService.createTextOutput(params);

}

Возвращает:

  • {"number":123}, если jobsCreated - это число 123, или
  • {"number":"Mangos"}, если jobsCreated - это строка "Mangos".

См. Сценарий, развернутый здесь , и лист для игры.


Примечание:

Вы должны избегать использования функций в JSON, функции потеряют свою область видимости, и вам придется использовать eval () для преобразования их обратно в функции.


0 голосов
/ 21 февраля 2020

Хорошо, как я ответил @Aerials, еще раз спасибо за вашу помощь, кстати. Увидев другие коды, которые должны работать не с моим сценарием, я решил создать новый лист и сценарий в качестве теста, и с точно таким же кодом он работает.

Но теперь проверю его немного больше, что-то что я не думаю, что это проблема, так как он набирает номер без проблем. Ячейка заполняется надстройкой GoogleAnalytics. Теперь при настройке надстройки снова для получения информации скрипт с сайта снова возвращает пустое значение. Так что, похоже, проблема в том, что скрипт получает информацию из листа (только опубликованную версию), когда он заполняется надстройкой

0 голосов
/ 20 февраля 2020

попробуйте это:

function doGet(e) {
  return ContentService.createTextOutput(Utilities.formatString('number: %s',SpreadsheetApp.getActiveSheet().getRange(12,2).getValue());

}
...