вернуть каждое значение из цикла?

73
1

Я пытаюсь вернуть все значения из массива 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;
}

спросил(а) 2016-07-11T02:22:00+03:00 3 года, 5 месяцев назад
1
Решение
71

Похоже, вы должны изменить значение buttonTemplate в своем цикле for, если это тот результат, который вы хотите. Например: 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;
}

ответил(а) 2016-07-11T02:37:00+03:00 3 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема