我正在使用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画廊中共享的视图完全相同的视图。
答案 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;
}