Надстройка Google Sheets, не работающая должным образом после публикации

Я создал надстройку для таблиц Google для кого-то другого, и им нужны другие люди в их организации Gsuite, чтобы также иметь возможность использовать эту надстройку. Дополнение работало должным образом во время тестирования и разработки, но когда мы его опубликовали, оно работало только для той учетной записи, которая его опубликовала. Когда другие пытались использовать его, он не работал должным образом. У него были некоторые функции, но не другие, и я не могу точно определить, что происходит.

Я гуглил, следил за руководствами и экспериментировал в течение нескольких часов и не могу понять это. Я считаю, что добавил все необходимые области и включил все API, но я новичок в этом, так что ИДК?

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

[ОТРЕДАКТИРОВАНО С КОДОМ] Дополнение отображается в магазине и может быть установлено. Он показывает меню и боковую панель, но кнопки на боковой панели не работают. Я думаю, что это проблема с дополнением и его публикацией, а не проблема с самим кодом, но я думаю, именно поэтому я спрашиваю здесь... https://codepen.io/garrettarh/pen/abvgmKJ Я получаю эту ошибку в консоли Chrome:

Uncaught     (string of numbers)-mae_html_user_bin_i18n_mae_html_user.js:54

Я знаю, что это некрасиво, но я новичок в Gsuite и App Script, просто нашел что-то, что работает. Оптимизация на самом деле не является приоритетом.

[ОТРЕДАКТИРОВАНО С ОБЛАСТЬЮ] введите здесь описание изображения

[ИЗМЕНИТЬ С ВРЕМЕННЫМ РЕШЕНИЕМ] Я столкнулся с этим вопросом Загрузка файла с помощью формы HtmlService в Google Apps всегда вызывает ошибку сервера и трассировку стека

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


person Garrett Smith    schedule 28.05.2020    source источник
comment
Да, вопрос очень расплывчатый, и консоль Chrome может отображать сообщения об ошибках, которые не связаны с вашим дополнением.   -  person Rubén    schedule 28.05.2020
comment
У вашего дополнения есть динамическое меню? Используете ли вы простые или устанавливаемые триггеры? Пользователи надстроек устанавливают надстройку из меню надстроек электронной таблицы или из G Suite Marketplace? Дополнение было установлено отдельными лицами или оно было установлено для всего домена?   -  person Rubén    schedule 28.05.2020
comment
Ну, я не получил эту ошибку до публикации. Он появляется при нажатии кнопки на моей боковой панели. (Кнопка — не единственная функция, которая нарушена). Затем кнопка запускает функцию скрипта Google. Надстройка была опубликована для внутренней организации Gsuite. Дополнение имеет меню. Надстройка устанавливается из меню надстроек gsuite marketplace организации, но не для всего домена.   -  person Garrett Smith    schedule 28.05.2020
comment
Ну, когда ты собираешься поделиться всем своим кодом?   -  person Cooper    schedule 28.05.2020
comment
mae_html_user_bin_i18n_mae_html_user.js является ли этот файл частью кода надстройки? Чтобы помочь другим, обычно необходимо увидеть код или воспроизвести ошибку. С предоставленной информацией это невозможно.   -  person Aerials    schedule 28.05.2020
comment
Извините всех. Код добавлен. Нет, файл в ошибке не является частью моего дополнения.   -  person Garrett Smith    schedule 28.05.2020
comment
Вы являетесь администратором G Suite в организации? проверьте видимость надстройки в организации Developers.google.com/gsuite/add-ons/how-tos/   -  person Aerials    schedule 28.05.2020
comment
Я нет, но я могу попросить администратора проверить. Когда мы опубликовали его, мы проверили Внутреннее, а не внешнее. Это то же самое? Но другие могут установить надстройку, она просто не работает должным образом.   -  person Garrett Smith    schedule 28.05.2020
comment
Доступна ли электронная таблица пользователям, не являющимся ее владельцами?   -  person Alan Wells    schedule 28.05.2020
comment
Он опубликован для внутреннего использования на торговой площадке G Suite. Я не думаю, что это делится каким-либо другим способом.   -  person Garrett Smith    schedule 28.05.2020
comment
Я хотел исключить возможность проблемы с правами доступа к общему файлу. Например, когда множество пользователей используют одну и ту же электронную таблицу. Еще одна вещь, которую я хочу исключить, — это настройки области в проекте Google Cloud Platform. Области должны быть установлены в GCP в двух разных местах: SDK GSuite Marketplace и на экране согласия OAuth. Прицелы должны быть одинаковыми в обоих местах.   -  person Alan Wells    schedule 28.05.2020
comment
Я отредактировал вопрос, чтобы включить информацию о области. Я добавил только те области, которые мне нужны в свойствах проекта.   -  person Garrett Smith    schedule 28.05.2020


Ответы (1)


Я не уверен, что это вообще что-то изменит, но я изменил скрипт в HTML на:

<html>
  <head>
    <base target="_top">
    <link href="https://ssl.gstatic.com/docs/script/css/add-ons.css" rel="stylesheet">
    <style>
    #title {
    color: #54AE54 !important;
    font-size: 18px;
    padding: 6px;
    }
    #runScript {
    background: #54AE54 !important;
    color: #F1FFE7;
    margin: 20px;
    }

    body {
    background: white;
    text-align: center;
    }
    .outline {
    outline-style: double ;
    outline-color: #968E85 ;
    padding: 10px;
    }

    .smallH {
    margin-block-start: 0.8em;
    margin-block-end: 0.8em;
    }
    .range {
    width: 45%;
    display: inline-block;
    padding: 5px;
    }
    #classesRange:disabled {
    color: gray;
    }
    #emailRange:disabled {
    color: gray;
    }
    </style>
  </head>



  <body>
  <div class="outline">
    <h1 id="title">Course Choice ID Match</h1>
    <hr class='solid'>
    <h2>Input Sheet</h2>
    <select name="Input Sheet" id="inputSheetDD">
       <option value="" disabled selected hidden>Choose an input sheet</option>
       <? var sheets=SpreadsheetApp.getActive().getSheets(); ?>
       <? for (var i=0;i<sheets.length;i++) { ?>
       <option value=<?=sheets[i].getName()?>> <?= sheets[i].getName()?></option>
       <? } ?>
    </select>
    <? var sheets=SpreadsheetApp.getActive(); ?>
    <h2>Input Columns</h2>
    <div class="range">
    <h4>Email Columns</h4>
       <input type="text" placeholder="type cell range" id="emailRange" size="12"?>
       <h5 class="smallH">OR...</h5>
       <button id="emailButton">Get Selected Range</button>
    </div>
    <div class="range">
       <h4>Classes Columns</h4>
       <input type="text" placeholder="type cell range" id="classesRange" size="12"?>
       <h5 class="smallH">OR...</h5>
       <button id="classesButton">Get Selected Range</button>
    </div>
    <h2>Output</h2>
    <h5 class="smallH">Output Sheet Name</h5>
    <input type="text" placeholder="name output sheet" id="outputName">
    <h5 class="smallH">Creator ID</h5>
    <input type="text" placeholder="type creator ID #" id="creatorID">
    <button id="runScript">Run Script</button>
   </div>



    <script>
    function onSuccess(activeRange) {
       if (window.buttonClicked == 'classesButton') {
          classesRange.value = activeRange;
          classesRange.disabled = false;
       }
       if (window.buttonClicked == 'emailButton') {
          emailRange.value = activeRange;
          emailRange.disabled = false;
       }
    }

    window.onload = function() {
      var buttons = document.getElementsByTagName("button");

      console.log("buttons.length: " + buttons.length)

      for (var i = 0; i <= buttons.length; i += 1) {
        var thisBtn = buttons[i];

        if (!thisBtn) {
          return;
        }

        console.log('thisBtn.id: ' + thisBtn.id)
        var thisID = thisBtn.id;

        switch(thisID) {

          case 'classesButton':
            console.log('its classesButton')
            thisBtn.addEventListener("click", function() {
              window.buttonClicked = this.id;
              document.getElementById("classesRange").disabled = true;
              document.getElementById("classesRange").value = "working...";
              google.script.run.withSuccessHandler(onSuccess).getSelectedRange();
             })

             break;
            case 'emailButton':
              console.log('its emailButton')

              thisBtn.addEventListener("click", function() {
                window.buttonClicked = this.id;
                document.getElementById("emailRange").disabled = true;
                document.getElementById("emailRange").value = "working...";
                google.script.run.withSuccessHandler(onSuccess).getSelectedRange();
               })
              break;
            case 'runScript':
              console.log('its runScript')

              thisBtn.addEventListener("click", function() {
                window.buttonClicked = this.id;
                var inputSheet = document.getElementById('inputSheetDD').value;
                var emailRange = document.getElementById('emailRange').value;
                var classesRange = document.getElementById('classesRange').value;
                var outputName = document.getElementById('outputName').value;
                var creatorID = document.getElementById('creatorID').value
                google.script.run.interpret(inputSheet, emailRange, classesRange, outputName, creatorID);
                })
                break;
            }
         }

        };

    </script>
  </body>
</html>
person Alan Wells    schedule 28.05.2020
comment
Спасибо, вы фактически исправили другую проблему, которая у меня была с этим кодом. Я попрошу администратора добавить этот код позже. - person Garrett Smith; 28.05.2020