Создание таблицы в Google App Script со столбцом даты - PullRequest
0 голосов
/ 09 января 2019

Я сейчас запрашиваю таблицу из листа Google, в которой есть столбец Дата. Столбец даты в моей панели содержит информацию о времени, которую я хочу удалить; также в моем коде дата начала - 12/12/2018, но моя панель управления начинается на день раньше. 17.12.2008 16.00

Мой источник данных выглядит так:

enter image description here

Моя панель инструментов выглядит следующим образом:

enter image description here

Мой код выглядит следующим образом.

Code.gs:

function doGet(e) {
  
  return HtmlService
  .createTemplateFromFile("Line Chart multiple Table")
  .evaluate()
  .setTitle("Google Spreadsheet Chart")
  .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  
}

function getSpreadsheetData() {
  
  var ssID  = "1jxWPxxmLHP-eUcVyKAdf5pSMW6_KtBtxZO7s15eAUag";
  var sheet = SpreadsheetApp.openById(ssID).getSheets()[1];
  
 
  var data1 = sheet.getRange('A2:F9').getValues();
  var data2 = sheet.getRange('A2:F9').getValues();

  
  var rows   = {data1: data1, data2: data2};

 var r = JSON.stringify(rows);
      return r;
    }
 

Линейная диаграмма, несколько таблиц.html

<!DOCTYPE html>
<html>

<head>
  <script src="https://www.gstatic.com/charts/loader.js"></script>
</head>

<body>


  <div id="linechartweekly"></div>
  <div id="table2"></div>
 
  <div class = "block" id="message" style="color:red;">
  

  <script>
    google.charts.load('current', {'packages':['table']});
    
    google.charts.load('current', {packages: ['corechart', 'line']});
     
    google.charts.setOnLoadCallback(getSpreadsheetData);
    
     function display_msg(msg) {
          console.log("display_msg():"+msg);
          document.getElementById("message").style.display = "block"; // Style of display
          var div = document.getElementById('message');
          div.innerHTML = msg;
    }

    function getSpreadsheetData() {
    google.script.run.withSuccessHandler(drawChart).getSpreadsheetData();
    
    }

    function drawChart(r) {
      // Parse back to an object 
      var rows = JSON.parse(r); 
          
       console.log("rows:"+rows);  

         
      var data1 = google.visualization.arrayToDataTable(rows.data1, false);
      
      var data2 = google.visualization.arrayToDataTable(rows.data2, false);
    
       
      var options1 = {
        title: 'SPC Chart weekly',
        legend: ['USL', 'UCL', 'Data', 'LCL', 'LSL'],
        colors: ['Red', 'Orange', 'blue', 'Orange', 'Red'],
        pointSize: 4,
      };
            
      var chart1 = new google.visualization.LineChart(document.getElementById("linechartweekly"));
      chart1.draw(data1, options1);
     
      var table2 = new google.visualization.Table(document.getElementById("table2"));
      table2.draw(data2, {showRowNumber: false, width: '50%', height: '100%'});   
  
    }
    
    function failure_callback(error) {         
         display_msg("ERROR: " + error.message);
         console.log('failure_callback() entered. WTF'+error.message);
    }
    
  </script>
</body>

</html>

Могу ли я узнать, как изменить дату на правильный формат, удалив время, а также обеспечить правильную дату начала

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 09 января 2019

Реальная проблема поставила меня в тупик, но у меня есть обходной путь; см. пример измененного кода ниже с некоторой дополнительной обработкой ошибок.

Я тщательно протестировал серверную функцию, и с ее точки зрения нет абсолютно никакой разницы в объекте row, который создается независимо от того, начинается ли диапазон со столбца «I» или «J».

Проблема проявляется в обработчике успеха на стороне клиента, который, когда столбец «I», по сути, получает нулевой аргумент, обратите внимание, что весь объект, а не только часть row.data1, является нулевым.

Объект строки, который передается с сервера клиенту, довольно сложен (объект с 3 парами ключ-значение, где значения являются довольно длинными массивами). В документации GAS я не вижу ничего, что запрещало бы следующее: Legal parameters and return values are JavaScript primitives like a Number, Boolean, String, or null, as well as JavaScript objects and arrays that are composed of primitives, objects and arrays. Так что это может быть ошибкой?

Обходной путь, проиллюстрированный в приведенных ниже примерах кода, состоит в том, чтобы преобразовать объект в функцию на стороне сервера, а затем проанализировать его обратно до объекта в клиенте.


HTML


<!DOCTYPE html>
<html>

<head>
  <script src="https://www.gstatic.com/charts/loader.js"></script>
</head>

<body>

  <div id="table1"></div>
  <div id="linechartweekly"></div>
  <div id="table2"></div>

  <div class = "block" id="message" style="color:red;">

  <script>
    google.charts.load('current', {'packages':['table']});
    google.charts.load('current', {packages: ['corechart', 'line']});
    google.charts.setOnLoadCallback(getSpreadsheetData);

    function display_msg(msg) {
          console.log("display_msg():"+msg);
          document.getElementById("message").style.display = "block"; // Style of display
          var div = document.getElementById('message');
          div.innerHTML = msg;
    }

    function getSpreadsheetData() {
      google.script.run.withFailureHandler(failure_callback).withSuccessHandler(drawChart).getSpreadsheetData();
    }

    function drawChart(r) {
      // Parse back to an object 
      var rows = JSON.parse(r); 

      console.log("rows:"+rows);  
      var data1 = google.visualization.arrayToDataTable(rows.data1, false);    
      var data2 = google.visualization.arrayToDataTable(rows.data2, false);     
      var data3 = google.visualization.arrayToDataTable(rows.data3, false);

      var options1 = {
        title: 'SPC Chart weekly',
        legend: ['USL', 'UCL', 'Data', 'LCL', 'LSL'],
        colors: ['Red', 'Orange', 'blue', 'Orange', 'Red'],
        pointSize: 4,
      };

      var table1 = new google.visualization.Table(document.getElementById("table1"));
      table1.draw(data1, {showRowNumber: false, width: '50%', height: '100%'});

      var chart1 = new google.visualization.LineChart(document.getElementById("linechartweekly"));
      chart1.draw(data2, options1);

      var table2 = new google.visualization.Table(document.getElementById("table2"));
      table2.draw(data3, {showRowNumber: false, width: '50%', height: '100%'});

    }

    function failure_callback(error) {         
         display_msg("ERROR: " + error.message);
         console.log('failure_callback() entered. WTF'+error.message);
    }

  </script>
</body>

</html>

код


function doGet(e) {

      return HtmlService
      .createTemplateFromFile("Line Chart multiple Table")
      .evaluate()
      .setTitle("Google Spreadsheet Chart")
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);

    }


    function getSpreadsheetData() {

      var ssID  = "1jxWPxxmLHP-eUcVyKAdf5pSMW6_KtBtxZO7s15eAUag";
      var sheet = SpreadsheetApp.openById(ssID).getSheets()[0];
      //var firstrow = 6; //11th row
      //var range = sheet.getRange(firstrow, 1, sheet.getLastRow() - firstrow + 1, 6);
      //var data1 = range.getValues();

      var d1 = sheet.getRange('A1:B5').getValues();
      var d2 = sheet.getRange('I2:O4').getValues();
      var d3 = sheet.getRange('I2:O4').getValues();
      var rows   = {data1: d1, data2: d2, data3: d3};
      // Stringify the object
      var r = JSON.stringify(rows);
      return r;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...