Как отформатировать немодальный диалог

#google-apps-script

#google-приложения-скрипт

Вопрос:

У меня есть немодальное диалоговое окно, в котором отображается содержимое ряда ячеек. Однако все данные выполняются вместе, celldata, celldata, celldata, celldata.

Я нашел очень мало информации о форматировании немодального диалога, и те примеры, которые я нашел, содержат только некоторый текст или вопрос «да / нет» для ответа. Форматирование ширины / высоты достаточно простое, но не делает того, что мне нужно.

Я ничего не нахожу о том, как отформатировать это так, чтобы оно располагалось ВЕРТИКАЛЬНО следующим образом: celldata
celldata
celldata
celldata

Кто-нибудь может предложить push?

Комментарии:

1. Создайте HTML-строку из этих данных. Скорее всего, ваши данные находятся в массиве, поэтому используйте стандартный JavaScript для доступа к его элементам и форматируйте их по своему усмотрению

2. Это будет базовый css / html. Добавьте перенос строки </br> или создайте таблицу с тегами <table> , <tr> и <td> .

3. Вы можете создать HTML-код на сервере в файле GS или создать HTML-код на стороне клиента в браузере. Это можно сделать несколькими способами.

Ответ №1:

Вот пример создания пользовательского диалогового окна и размещения значений строки по вертикали. В этом случае 1-я строка электронной таблицы является именем для значений столбца. Этот пример демонстрирует использование HTMLTemplate и google.script.run для запроса данных из электронной таблицы. Есть 4 файла, Code.gs , HTML_Table.html , JS_Table.html и CSS_Table.html .

Code.gs

 function test() {
  try {
    var html = HtmlService.createTemplateFromFile("HTML_Table").evaluate();
    SpreadsheetApp.getUi().showModelessDialog(html, "Table");
  }
  catch(err) {
    Logger.log(err);
  }
}

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

function initTable() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var table = {};
  table.rowCount = sheet.getLastRow()-1;
  table.values = sheet.getRange(1,1,2,sheet.getLastColumn()).getValues();  // 2 rows
  return JSON.stringify(table);
}

function getRow(i) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var row = {};
  row.values = sheet.getRange(i,1,1,sheet.getLastColumn()).getValues()[0];  // only 1 row
  return JSON.stringify(row);
}
  

HTML_Table.html

 <!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <?!= include('CSS_Table'); ?>    
  </head>
  <body>
    <select id="selectRow" onchange="getRow()">
    </select>
    <div id="tableRows">
    </div>
    <?!= include('JS_Table'); ?>    
  </body>
</html>
  

CSS_Table.html

 <style>
  td { border-style: solid }
</style>
  

JS_Table.html

 <script>
  (function () {
    google.script.run.withSuccessHandler(
      function (value) {
        var rows = JSON.parse(value);
        var select = document.getElementById("selectRow");
        for( var i=1; i<=rows.rowCount; i   ) {
          var option = document.createElement("option");
          option.text = i;
          select.add(option);
        }
        var div = document.getElementById("tableRows");
        var table = document.createElement("table");
        table.setAttribute("id","tableCells");
        for( var i=0; i<rows.values[0].length; i   ) {
          var row = document.createElement("tr");
          var cell = document.createElement("td");
          cell.appendChild(document.createTextNode(rows.values[0][i]));
          row.appendChild(cell);
          cell = document.createElement("td");
          cell.appendChild(document.createTextNode(rows.values[1][i]));
          row.appendChild(cell);
          table.appendChild(row);
        }
        div.appendChild(table);
      }
    ).initTable();
  }());

  function getRow() {
    var row = document.getElementById("selectRow").selectedIndex 1;
    google.script.run.withSuccessHandler(
      function (value) {
        var row = JSON.parse(value);
        var table = document.getElementById("tableCells");
        for( var i=0; i<table.rows.length; i   ) {
          table.rows[i].cells.item(1).innerHTML = row.values[i];
        }
      }
    )
    .getRow(row);
  }
</script>