将addRows()中的电子表格数据作为数组传递

时间:2019-08-09 20:17:45

标签: google-apps-script charts google-sheets google-visualization spreadsheet

我正在使用this Calendar Chart guide,而不是在HTML脚本的dataTable.addRows组件中添加静态数据,而是尝试从this spreadsheet传递仅包含两列的数据( “日期”和“数字”类型的列)。

当我打印函数的结果时,将其复制粘贴到dataTable.addRows组件中作为静态值,就可以了!

我尝试过以“数组”和“字符串”两种格式传递数据,但一直在Chrome浏览器的控制台中不断出现以下错误- Uncaught (in promise) Error: Every row given must be either null or an array.

Uncaught Error: Row given with size different than 2 (the number of columns in the table).

我还尝试过创建一个for循环并使用 addRow 而不是addRow s ,但这也不起作用。

The script已部署为Web应用程序,可以here进行访问。

数组格式:getEventsArrayFormat

function getEventsArrayFormat() {
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var range = activeSheet.getDataRange();
  var values = range.getDisplayValues();
  var rowDisplay = range.getLastRow();
  var columnDisplay = range.getLastColumn()
  var data1 = [];
  for (var i = 1; i < rowDisplay; i++ ) {
    var rowData = [];
    data1 = data1 + "[ new Date('"
    for (var j = 0; j < columnDisplay; j++ ) {
      if (j == 0) {
        data1 = data1 + values[i][j] + "'), "
      } else if (j == 1 && i < rowDisplay - 1) {
        data1 = data1 + values[i][j] + " ],"
      } else if (j == 1 && i < rowDisplay) {
        data1 = data1 + values[i][j] + " ]"
      }
    }
    rowData.push(data1)
    data1 = data1 + "\n";
  }
  return rowData;
}

字符串格式:getEventsStringFormat

function getEventsStringFormat() {
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var range = activeSheet.getDataRange();
  var values = range.getDisplayValues();
  var rowDisplay = range.getLastRow();
  var columnDisplay = range.getLastColumn()
  var data1 = '';
  for (var i = 1; i < rowDisplay; i++ ) {
    data1 = data1 + "[ new Date('"
    for (var j = 0; j < columnDisplay; j++ ) {
      if (j == 0) {
        data1 = data1 + values[i][j] + "'), "
      } else if (j == 1 && i < rowDisplay - 1) {
        data1 = data1 + values[i][j] + " ],"
      } else if (j == 1 && i < rowDisplay) {
        data1 = data1 + values[i][j] + " ]"
      }
    }
    data1 = data1 + "\n";
  }
  Logger.log(data1)
  return data1;
}

希望通过使用电子表格中的数据来查看与Google画廊中共享的视图完全相同的视图。

1 个答案:

答案 0 :(得分:2)

我认为问题在于您无法使用google.script.run检出这些restrictions来传递日期。因此,只需将它们转换为字符串即可。如果您希望它们成为客户端的日期,则可以使用JavaScript将其转换回去。

function getEventsArrayFormat() {
  var sh=SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var rg=sh.getRange(2,1,sh.getLastRow()-1,2);
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++) {
    vA[i][0]=Utilities.formatString('%s/%s/%s',new Date(vA[i][0]).getMonth()+1,new Date(vA[i][0]).getDate(),new Date(vA[i][0]).getFullYear());
  }
  return vA;
}