Google表格Api - 来自其他工作表的附加内容

时间:2017-10-06 03:49:57

标签: google-apps-script google-api google-sheets-api

问题描述:

我想在我的Google工作表(g-1)上创建一个加载项。当用户打开加载项时,我想立即阅读另一个谷歌电子表格(g-2)并根据这些列填充g-1的下拉列表。

我启用了Googlesheet Api 在Code.js中:

function readSpreadsheet() {
  var questions = Sheets.Spreadsheets.Values.get("_ID_", "SHEET!A2:k").values
  if (!questions) {
    return 'No data found.';
  } else {
    return questions
  }
}

上面的函数有效,因为如果我将它添加到加载项的标题上,我会看到正确的列数:

HtmlService.createHtmlOutputFromFile('QuestionBank').setTitle(readSpreadsheet().length)

或者我可以打印第一行

readSpreadsheet()[0]

............

到目前为止一切顺利。

现在在我的html文件中,QuestionBank.html,

问题#1。我无法调用readSpreadsheet,它返回undefined。 var question_rows返回undefined。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>

  /**
    read all rows, upon clicking on sync button. But this is not necessary if I can populate the dropdowns on load
  **/


  $(function() {
    $('#sync').click(readSpreadsheet);
  });

  function readSpreadsheet() {
    this.disabled = true;
    $('#error').remove();
    var question_rows = google.script.run
        .withSuccessHandler(
          function(textAndTranslation, element) {
            element.disabled = false;
          })
        .withFailureHandler(
          function(msg, element) {
            element.disabled = false;
          })
        .withUserObject(this)
        .readSpreadsheet();

        for (var row = 0; row < question_rows.length; row++) {
          alert(question_rows[row])
        }
  }
</script>

问题#2:我有几个下拉列表,我希望它们的值是g-2列的唯一值。我希望在加载项打开时填充这些下拉列表。

<select class="filter">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

所以不是沃尔沃等,我想要数据的第一列,唯一值

问题#3:如果无法加载,我可以包含一个按钮来读取数据并填充下拉列表

<button class="sync-button" id="sync">sync</button> 

1 个答案:

答案 0 :(得分:2)

以下答案如何?

回答问题#1

google.script.run不会返回值。当它使用google.script.run中的值时,在您的情况下,textAndTranslation的{​​{1}}是返回值。因此,您可以按如下方式修改withSuccessHandler

readSpreadsheet()

回答问题#2

您可以将google.script.run放在function readSpreadsheet() { this.disabled = true; $('#error').remove(); google.script.run .withSuccessHandler(withSuccessHandler) .withFailureHandler( function(msg, element) { element.disabled = false; }) .withUserObject(this) .readSpreadsheet(); } function withSuccessHandler(textAndTranslation, element) { element.disabled = false; var question_rows = textAndTranslation; for (var row = 0; row < question_rows.length; row++) { alert(question_rows[row]) } } 中来实现。样品如下。这是一个样本。所以请将变量修改为你的。

$(function() {})

回答问题#3

当然,您可以使用按钮将值设置为<select class="filter"></select> <script> $(function() { google.script.run.withSuccessHandler(sample).readSpreadsheet(); }); function sample(data) { for (var i=0; i < data.length; i++) { $('.filter').append($('<option>').html(data[i]).val(data[i])); } }

如果我误解了你的问题,我很抱歉。