Как извлечь случайную строку из листов Google и использовать ее в таблице HTML - PullRequest
1 голос
/ 17 января 2020

Я работаю над небольшим проектом, в котором я хочу произвольно вытащить одну строку листа 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
  
}

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Если вы хотите опубликовать sh веб-приложение из HTMLOutput, возвращаемого вашей функцией, вы можете сделать следующее:

  • Переименовать вашу функцию на doGet: если вы сделаете это, Apps Script будет запускать эту функцию всякий раз, когда пользователь посещает URL-адрес веб-приложения, которое вы собираетесь опубликовать sh, как вы можете видеть здесь .

  • Удалите return array; в вашем коде: ключевое слово return завершает текущую функцию, поэтому код никогда не вернет HTMLOutput, а массив значений не является допустимым объектом чтобы вернуться в этой ситуации.

  • Опубликовать sh сценарий в виде веб-приложения : в редакторе сценариев выберите Publish > Deploy as web app. Затем выберите Project version, выберите, под чьей авторизацией должно запускаться приложение и кто должен иметь к нему доступ, и нажмите Deploy. URL будет отображать приложение как Current web app URL. Если вы перейдете по этому URL, вы увидите HTML, который вы создали.

Надеюсь, это поможет.

0 голосов
/ 17 января 2020

Использование API Google Sheets без необходимости запуска собственного сервера: я не забываю следовать советам, приведенным в следующей статье, чтобы решить эту проблему некоторое время go.

https://coderwall.com/p/duapqq/use-a-google-spreadsheet-as-your-json-backend

Вероятно, вам понадобится другая служба для добавления заголовков CORS в ответ Google, поскольку cors.io, по-видимому, больше не существует.

...