1

我有一个从电子表格数据创建表格视图的 uiApp,但我在日期列中的空单元格方面遇到了困难。

基本上,一些电子表格单元格是可选的,我还没有弄清楚如何将 no(或 null)值放入表中。现在,如果我将列值设置为:

projectDataRaw[i][projectDataKeys[j]]= new Date(); // inserting dummy data

但是我也想在表格视图中将这些单元格留空,但是,当我使用时:

projectDataRaw[i][projectDataKeys[j]]= null; // 

或者它的一些变体,它会出错,因为列类型设置为 DATE。我可以转换为字符串,但我有点希望能够在日期值可用时相互比较它们。

-- 表视图和空数据问题示例 --

// load data from sheet
var _PMsheet = "sheet key";
var sSheet = SpreadsheetApp.openById(_PMsheet);
var projectData = sSheet.getRangeByName("ProjectDateCol").getValues();

var projectDataTable = Charts.newDataTable();
projectDataTable.addColumn(Charts.ColumnType.DATE, "Date Column");

for (var i=0; i < projectData.length; i++) {
  if (projectData[i] == undefined || projectData[i] == "undefined") {
    projectDataTable.addRow([null]);// Object type does not match column type.
    // null fails, "undefined" fails, "" fails, [] fails 
  }
  else {
    projectDataTable.addRow([projectData[i]]); // this cell has a valid date obj
  }

}
4

1 回答 1

0

我创建了一个简单的脚本,它将 null 写入 A1 单元格并将当前日期写入 A2 单元格。完整的 A 列被验证为日期时间。脚本执行后,单元格 A1 为空,即使它之前包含一个值并且没有任何警告或错误消息。

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rangeValues = [[null], [new Date()]];
  sheet.getRange("A1:A2").setValues(rangeValues);
}

如果此示例对您没有帮助,请发布尽可能小的工作脚本,该脚本无法按您的预期工作。

更新,基于作者的澄清:我写了一个简单的脚本试图找出问题原因并找到解决方法。代码如下。如果取消注释该data.addRow(['', 2.0]);行,则该方法抛出异常addRow。这是一种预期的行为。如果取消注释该data.addRow([null, 3.0]);行,则该chart.setDataTable(data)行将引发异常。从我的角度来看,这种行为是不正确的,我认为有必要向问题跟踪器报告问题。

还有一个解决方法是使用DataTableBuilder.setValue方法。代码演示了它。

顺便说一句,DataTableBuilder.setValue文档中的描述不正确。它不包含column参数。这是问题跟踪器的主题。

function doGet(e) {
  var app = UiApp.createApplication();
  var chart = Charts.newTableChart();
  var data = Charts.newDataTable();
  data.addColumn(Charts.ColumnType.DATE, 'Date');
  data.addColumn(Charts.ColumnType.NUMBER, 'Value');
  data.addRow([new Date(), 1.0]);
//  data.addRow(['', 2.0]); // throws the "Object type does not match column type" exception in this line.
//  data.addRow([null, 3.0]); // throws the "We're sorry, a server error occurred. Please wait a bit and try again" exception in the "chart.setDataTable(data)" line.
  data.setValue(1, 1, 3.0);
  chart.setDataTable(data);
  app.add(chart.build());
  return app;
}
于 2012-09-11T09:38:16.850 回答