Получить все данные из электронной таблицы в HTML - PullRequest
0 голосов
/ 02 ноября 2018

Когда я запускаю его как скрипт Google (в code.gs), он работает, однако, когда я беру его в файл index.html, я не могу получить все данные из электронной таблицы.

листы должны быть в формате 3D, sheets[0] должен отображать все данные на листе 0 (строки х столбцы) Но вместо этого в data я получаю то, что выглядит как строка (когда я делаю data[0], он показывает только первый символ). Почему?

Вот код:

GAS

function doGet(request) {
  return HtmlService.createTemplateFromFile('index')
    .evaluate();
}

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

function getSheetsData(){
  ss = SpreadsheetApp.openById('id_key');         
  var sheets = []; 
  for (var i = 0; i < ss.getSheets().length; ++i) {           
    sheets.push(ss.getSheets()[i].getDataRange().getDisplayValues());  
  }    
  return (sheets)
}

СТОРОНА КЛИЕНТА

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">    
    <?!= include('css'); ?>    

    <!-- the idea is to pull the data from the spreadsheet and build slides with the questions to show a Quiz of questions (not yet done)-->
    <script>
      var datas = null;
      google.script.run.withSuccessHandler(function(result){ 
        datas = result;
        console.log(datas); //YES, datas has the data
      }).getSheetsData();
      console.log(datas);   //NO, datas is null
    </script>         
    </head>

  <body>    
  <h1>TESTS QUIZ [WEB APP]
    <br>
    <br>
      <!-- Build select options from spreadsheet sheets -->
      <?  var ss = SpreadsheetApp.openById('id_key'); ?>
      <select class="classic" id="sheet" onchange="someFunctionWillGoHereToStartTheQuiz">
      <option value="" disabled selected style="display:none;">Choose Quiz</option>
      <? for (var i = 0; i < ss.getSheets().length; ++i) { ?>      
        <option value="<?=i?>"><?= ss.getSheets()[i].getSheetName() ?></option>   
      <? } ?>
      </select>  
      <br>
      <br>
  </h1>
  <!--some code will go here to show the questions in the page-->

1 Ответ

0 голосов
/ 02 ноября 2018

Одним из предложений будет использование этого метода.

  1. создать функцию на стороне сервера, чтобы получить все данные
  2. получить данные на стороне клиента, используя обработчик успеха и вызывая google.script.run.myFunction()

GAS

function getSheetsData(){
 ss = SpreadsheetApp.openById('id_key_spreadsheet');         
    var sheets = []; //except if you want to add more datas no need to declare a 3D array
    for (var i = 0; i < ss.getSheets().length; ++i) {
       // I'v corrected this part so you don't get any "out of bounds" errors
      sheets.push(ss.getSheets()[i].getDataRange().getDisplayValues());  
    }
  return (sheets)
}

на стороне клиента

<script>
 var datas = null;
 google.script.run.withSuccessHandler(function(result)
   { 
     datas = result;
   }).getSheetsData();
</script>

Теперь, если вы хотите получить первую строку, подумайте об использовании 2 раза [] datas[0][0] как вы используете 2D массив. Ваша проблема также может возникнуть отсюда.

ЛИТЕРАТУРА

google.script.run

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...