Итак, у меня есть электронная таблица со списком названий отелей. Названия отелей указаны в ячейках D25-D57 (исключая D37-38, 44-45, 51-52).
Я написал скрипт для создания боковой панели, и идея в том, что на боковой панели будут перечислены все отели, перечисленные в электронной таблице. Вот мой HTML-шаблон:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script src="https://code.jquery.com/ui/1.10.4/jquery-ui.js">
</script>
<style>
.sortableItem {
height: 50px;
width: 300px;
border: 1px solid rgba(0, 0, 0, 0.1);
padding-top: 10px;
text-align: center;
font-weight: bold;
border-radius: 0 10px 10px 0;
background-color: #e7f0fe;
color: gray;
margin: 3px;
}
.sortableItem:hover {
cursor: pointer;
}
#sortable {
float: left;
}
#times {
float: left;
}
.day {
background-color: #4285f4;
color: white;
}
</style>
<script>
$(function() {
$("#sortable").sortable();
});
$(".sortable").sortable({
cancel: ".disable-sort-item"
});
</script>
</head>
<body>
<div id="sortable">
<div class="sortableItem day">Monday</div>
<div class="sortableItem" id="result1"></div>
<div class="sortableItem" id="result2"></div>
<div class="sortableItem" id="result3"></div>
<div class="sortableItem" id="result4"></div>
<div class="sortableItem" id="result5"></div>
<div class="sortableItem day">Tuesday</div>
<div class="sortableItem" id="result6"></div>
<div class="sortableItem" id="result7"></div>
<div class="sortableItem" id="result8"></div>
<div class="sortableItem" id="result9"></div>
<div class="sortableItem" id="result10"></div>
<div class="sortableItem day">Wednesday</div>
<div class="sortableItem" id="result11"></div>
<div class="sortableItem" id="result12">Hotel 2</div>
<div class="sortableItem" id="result13">Hotel 3</div>
<div class="sortableItem" id="result14">Hotel 4</div>
<div class="sortableItem" id="result15">Hotel 5</div>
<div class="sortableItem day">Thursday</div>
<div class="sortableItem" id="result16"></div>
<div class="sortableItem" id="result17"></div>
<div class="sortableItem" id="result18"></div>
<div class="sortableItem" id="result19"></div>
<div class="sortableItem" id="result20"></div>
<div class="sortableItem day">Friday</div>
<div class="sortableItem" id="result21"></div>
<div class="sortableItem" id="result22"></div>
<div class="sortableItem" id="result23"></div>
<div class="sortableItem" id="result24"></div>
<div class="sortableItem" id="result25"></div>
</div>
</body>
</html>
Имена отелей должны идти в div с идентификатором "result1, 2" и т. Д.
В моем файле GS есть следующее:
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Menu')
.addItem('Sort meeting order', 'openSortableSidebar')
.addToUi();
}
function openSortableSidebar(data) {
var html = HtmlService.createTemplateFromFile('sortable');
var sidebar_html = html.evaluate();
SpreadsheetApp.getUi().showSidebar(sidebar_html);
}
var hotelName = "";
var targetCells = [
"D25",
"D26",
"D27",
"D28",
"D29",
"D32",
"D33",
"D34",
"D35",
"D36",
"D39",
"D40",
"D41",
"D42",
"D43",
"D46",
"D47",
"D48",
"D49",
"D50",
"D51",
"D52",
"D53",
"D54",
"D55"
];
function findHotel() {
var hotelNames = [];
for (var i = 0; i < targetCells.length; i++) {
hotelName = sheet.getRange(targetCells[i]).getValue();
hotelNames.push(hotelName);
return hotelNames;
}
}
Таким образом, у меня есть целевые ячейки (то есть те, которые содержат названия отелей в моей электронной таблице) в виде массива, и мой цикл for работает успешно, поскольку он проталкивает все имена отелей в этих ячейках в массив. Моя проблема в связи с этой стороны сервера.
Таким образом, в моем HTML-файле я разработал, как вставить одно значение в первый div «result», и мне удалось написать цикл for, проталкивающий одно и то же значение во все div. Но я не могу протолкнуть массив успешно. Вот что я попробовал:
<script>
var idArray = ["result1", "result2", "result3"]
function addHotel(hotelNames){
for(var i=0; i<idArray.length +1; i++){
$('#result' + i).text(hotelNames[i]);
}
};
google.script.run.withSuccessHandler(addHotel).findHotel();
</script>
Я знаю, что все не так просто, но я застрял на этом. Если кто-то может помочь, это будет с благодарностью:)
PS: мой массив идентификаторов, очевидно, будет длиннее и увеличится до 25 обычно ...