返回for循环中的每个值?

时间:2016-07-10 23:22:15

标签: javascript google-apps-script

我正在尝试返回数组allArtistsArray中的每个值,这些值从电子表格中获取值,并首先显示为带有buttonTemplate的无序列表,然后显示电子表格中的每个值在它之后。

我遇到的问题是只返回电子表格中的第一个值并显示在网络应用上。如何在buttonTemplate之后显示每个值?

显示的内容是:

* buttonTemplate

or

* value 1 from spreadsheet

我想要展示的是:

* buttonTemplate
* value 1 from spreadsheet  
* value 2 from spreadsheet  
* value 3 from spreadsheet  
* etc

的index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <?!= getContent("js") ?>
    <?!= getContent("css") ?>
    <link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Abel">
  </head>
  <body>
    <div id="artistTabs">
      <ul id="artistList">
        <?!= createArtistList(); ?>
      </ul>
    </div>
  </body>
</html>

code.gs

var ss = SpreadsheetApp.openById('id');
var sheet = ss.getSheets()[0];

function doGet()
{
  return HtmlService.createTemplateFromFile('index').evaluate();
}

function getContent(filename)
{
  return HtmlService.createHtmlOutputFromFile(filename).getContent();
}

function createArtistList()
{
  var buttonStartingRow = 2;
  var buttonStartingColumn = 1;

  var buttonCell = sheet.getRange(buttonStartingRow, buttonStartingColumn).getValue();

  var x = '<li><a onClick="addArtist(); return false;" href="">';
  var y = buttonCell;
  var z = '</a></li>';

  var buttonTemplate = x + y + z;

  //return buttonTemplate;

  var startingRow = 2;
  var startingColumn = 1;
  var howManyRows = sheet.getLastRow() - 1;
  var howManyColumns = 1;

  var allArtistsArray = sheet.getRange(startingRow, startingColumn, howManyRows, howManyColumns).getValues(); //get every name in 1st column after second row
  //allArtistsArray = allArtistsArray.filter(function(n){return n[0] !== '' && n[0] !== buttonCell}); //filter 'buttonCell' value and blank rows
  //allArtistsArray = allArtistsArray.toString().split(","); //flatten 2d array to 1d array

  //Logger.log(allArtistsArray);

  for (i = 0; i < allArtistsArray.length; i++)
  {
    allArtistsArray = allArtistsArray.filter(function(n){return n[0] !== '' && n[0] !== buttonCell}); //filter 'buttonCell' value and blank rows
    allArtistsArray = allArtistsArray.toString().split(","); //flatten 2d array to 1d array

    if (allArtistsArray == '')
    {
      Logger.log("array = blank");
      break; //leave for loop and only return buttonTemplate ???
    }
    else
    {
      var x1 = '<li><a onClick="test(); return false;" href="">';
      var z1 = '</a></li>';

      var _1 = allArtistsArray[i];
      var _2 = x1 + _1 + z1;

      Logger.log(_2);
    }
  }
  Logger.log(allArtistsArray);
  return buttonTemplate;
}

1 个答案:

答案 0 :(得分:0)

在我看来,如果这是您想要的结果,您应该在for循环中更改buttonTemplate的值。例如:buttonTemplate += _2(或者您想要附加的任何内容,您的示例中都不清楚。)

修改

如果没有一个片段来玩,很难看出它是否有效,但这里有一个更好的例子:

function createArtistList()
{
  var buttonStartingRow = 2;
  var buttonStartingColumn = 1;

  var buttonCell = sheet.getRange(buttonStartingRow, buttonStartingColumn).getValue();

  var x = '<li><a onClick="addArtist(); return false;" href="">';
  var y = buttonCell;
  var z = '</a></li>';

  var buttonTemplate = x + y + z;
  var artistsOutput = '';
  //return buttonTemplate;

  var startingRow = 2;
  var startingColumn = 1;
  var howManyRows = sheet.getLastRow() - 1;
  var howManyColumns = 1;

  var allArtistsArray = sheet.getRange(startingRow, startingColumn, howManyRows, howManyColumns).getValues(); //get every name in 1st column after second row
  //allArtistsArray = allArtistsArray.filter(function(n){return n[0] !== '' && n[0] !== buttonCell}); //filter 'buttonCell' value and blank rows
  //allArtistsArray = allArtistsArray.toString().split(","); //flatten 2d array to 1d array

  //Logger.log(allArtistsArray);

  for (i = 0; i < allArtistsArray.length; i++)
  {
    allArtistsArray = allArtistsArray.filter(function(n){return n[0] !== '' && n[0] !== buttonCell}); //filter 'buttonCell' value and blank rows
    allArtistsArray = allArtistsArray.toString().split(","); //flatten 2d array to 1d array

    if (allArtistsArray == '')
    {
      Logger.log("array = blank");
      break; //leave for loop and only return buttonTemplate ???
    }
    else
    {
      var x1 = '<li><a onClick="test(); return false;" href="">';
      var z1 = '</a></li>';

      var _1 = allArtistsArray[i];

      if (_1 != null)
      {
        var _2 = x1 + _1 + z1;

        artistsOutput += _2;
        Logger.log(_2);
      } else {
        Logger.log('The ' + i + 'th element was null for some reason');
      }
    }
  }
  Logger.log(allArtistsArray);
  return buttonTemplate + artistsOutput;
}