Надстройка Google Таблиц не работает должным образом после публикации - PullRequest
0 голосов
/ 28 мая 2020

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

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

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

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

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

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

[ИЗМЕНЕНО В ОБЛАСТИ] enter image description here

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

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

1 Ответ

1 голос
/ 28 мая 2020

Я не уверен, что это вообще будет иметь значение, но я изменил сценарий в 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>
...