Я работаю над небольшим проектом, в котором я хочу произвольно вытащить одну строку листа Google, а затем использовать эти данные в таблице HTML.
На данный момент мое решение было сначала использовать javascript для создания случайного числа, а затем сгенерировать таблицу HTML из листов Google для этой строки, используя этот метод . Итак, я получаю URL для таблицы HTML с только строкой заголовка и случайной строкой данных, аналогичной this . Затем я просто встраиваю эту таблицу как объект в мою HTML страницу. Вот суть этого:
< script >
window.onload = function() {
var albumno = Math.random() * 408;
var albumno = Math.round(albumno);
var albumurl = "https://docs.google.com/spreadsheets/d/UNIQUE-DOCUMENT-ID/gviz/tq?tqx=out:html&tq=SELECT%20B%2C%20D%2C%20E%2C%20F%2C%20G%20WHERE%20A%20MATCHES%20%27" + albumno + "%27&gid=1739065700";
document.getElementById("output").innerHTML = "ALBUM NUMBER: " + albumno + ".";
document.getElementById("albumpath").innerHTML = '<object align="middle" data="' + albumurl + '">';
};
</script>
Есть два основных недостатка. Во-первых, таблицу нельзя (легко) отформатировать, если она встроена в объект. Во-вторых, мой лист Google представляет собой список, который добавляется в еженедельник, и поэтому я должен вручную настроить пределы случайного значения, сгенерированного в моем javascript.
. Есть ли способ сделать это более эффективно в Javascript? Возможно, очистив полную таблицу, а затем случайным образом выбрав строку данных, которую можно использовать в правильной таблице HTML (т.е. не внедрить в качестве объекта)? Или, может быть, мне поможет API листов Google?
ОБНОВЛЕНИЕ:
Мне удалось написать быструю функцию в скрипте Служб Google, которая выбирает случайную строку данных. Я рассчитал два способа вывода данных, вариант 1 в виде массива или вариант 2 в виде HTML кода для таблицы. Теперь, как мне вызвать эту функцию на моей странице HTML и использовать эти данные?
}
function randomalbum() {
//get spreadsheet
var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/[DOCID]/edit#gid=1');
var sh = ss.getSheetByName("Pick List");
//find last album
var Fvals = sh.getRange("F:F").getValues();
var Flast = Fvals.filter(String).length;
var colnum = sh.getRange(2, 1, Flast).getValues();
var albumlast = Math.max.apply(null, colnum)-1;
//pick random row (note the row an album is in is 1 more than the album no.)
var rowrand = Math.round(Math.random()*(albumlast+1));
//extract data of interest
var albumrand = rowrand -1;
var pick = sh.getRange(rowrand, 5).getValues();
var artist = sh.getRange(rowrand, 6).getValues();
var title = sh.getRange(rowrand, 7).getValues();
//make array (option 1)
var array = [albumrand, pick, artist, title];
return array;
//make HTML string (option 2)
var HTMLString = " <table style='width:100%'>"
+ "<tr>"
+ "<th>Album No.</th>"
+ "<th>Picked By</th>"
+ "<th>Artist</th>"
+ "<th>Artist</th>"
+ "</tr>"
+ "<tr>"
+ "<td>" + albumrand + "</td>"
+ "<td>" + pick + "</td>"
+ "<td>" + artist + "</td>"
+ "<td>" + title + "</td>"
+ "</tr>"
+"</table>"
HTMLOutput = HtmlService.createHtmlOutput(HTMLString);
return HTMLOutput
}