面向对象的Google Apps脚本

时间:2018-03-29 19:16:11

标签: google-apps-script

我正在使用Google表格中的自定义功能开展相关项目。我最近试图重构一些代码以使所有内容都面向对象,并发现Google表格不喜欢对象。

假设我在.gs文件中有以下内容

function Ob(x){
  this.x = x;
  this.toString = function() { return this.x;};
}

function print_Ob_wrapper(x){
  var ob = new Ob(x);
  return ob.toString();
}

function Ob_wrapper(x){
  var ob = new Ob(x);
  return ob;
} 

function print_Ob(ob){
  var result = ob.toString();
  Logger.log(result);
  return result;
}

如果我将=print_Ob_wrapper(5)放入单元格中,则单元格会按预期显示5。

如果我尝试在电子表格中调用=Ob_wrapper(5),我会得到一个空白单元格,这对我来说很有意义,因为工作表可能无法显示对象或其他内容。 对我来说没有意义的是为什么=print_Ob(Ob_wrapper(5))不显示5。

有什么想法?

1 个答案:

答案 0 :(得分:0)

经过大量测试后,似乎直接从电子表格调用的自定义函数无法返回对象。您的Ob_wrapper(x)函数执行此操作,因此结果未正确传递print_Ob()函数

你可以通过让第三个函数同时调用其他函数来解决这个问题:

function test(x){
var result = print_Ob(Ob_wrapper(x));
Logger.log(result);
return result
}