Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 已发布的google脚本链接,带有返回打印空变量的google Sheet_Json_Function_Google Apps Script_Web Applications - Fatal编程技术网

Json 已发布的google脚本链接,带有返回打印空变量的google Sheet

Json 已发布的google脚本链接,带有返回打印空变量的google Sheet,json,function,google-apps-script,web-applications,Json,Function,Google Apps Script,Web Applications,因为我倾向于漫无边际,首先是一个简短的版本,如果你需要更多的信息,请阅读长版本 TL;DR 为什么会这样: function doGet(e) { var sheet = SpreadsheetApp.getActiveSheet(); var jobsCreated = sheet.getRange(12,2).getValue(); Browser.msgBox(jobsCreated); var params = JSON.stringify({number:jobsCreate

因为我倾向于漫无边际,首先是一个简短的版本,如果你需要更多的信息,请阅读长版本

TL;DR

为什么会这样:


function doGet(e) {

var sheet = SpreadsheetApp.getActiveSheet();

var jobsCreated = sheet.getRange(12,2).getValue();

Browser.msgBox(jobsCreated);

var params = JSON.stringify({number:jobsCreated});

return ContentService.createTextOutput(params);

}
当我发布为网站并打开时返回此信息:
{“number”:“}

当它看起来更像这个
{“number”:2451}

完整版本:

首先,10年前,我在大学里学习了计算机科学学位编程,但从那以后,我没有做过多少编程,所以我基本上是个新手

现在来回答问题。我有一个非常简单的脚本,它是用GoogleSheets中的脚本编辑器创建的


function doGet(e) {

var sheet = SpreadsheetApp.getActiveSheet();

var jobsCreated = sheet.getRange(12,2).getValue();

Browser.msgBox(jobsCreated);

var params = JSON.stringify({number:jobsCreated});

return ContentService.createTextOutput(params);

}
首先,我得到我正在工作的工作表

然后,我从该工作表中选择一个单元格

现在,如果我使用msgBox来确保我有正确的号码并运行脚本,它就会工作并显示消息

接下来,我将变量格式化为JSON,最后创建一个文本输出

现在我部署为Web应用程序

  • 像我一样执行
  • 任何人,甚至是匿名的
当我访问该网站时,我只能看到:
{“number”:“}
如果我更改代码并给jobsCreated和static值,它就可以正常工作

var jobsCreated = 100;
{"number":100}
因此,我的结论是,与直接从编辑器运行脚本相比,从发布的链接运行脚本时访问单元格的值是个问题,但我不知道如何解决这个问题

还有一点信息,我正试图用这个计数器名为SMIRL,我从这里得到了大部分信息 试试这个:

function doGet(e) {
  return ContentService.createTextOutput(Utilities.formatString('number: %s',SpreadsheetApp.getActiveSheet().getRange(12,2).getValue());

}
试试这个:

function doGet(e) {
  return ContentService.createTextOutput(Utilities.formatString('number: %s',SpreadsheetApp.getActiveSheet().getRange(12,2).getValue());

}

您的问题在于如何使用
JSON.stringify

在JSON中,函数不允许作为对象值。

该函数将省略或更改为
null
JavaScript对象中的任何函数

也就是说,您可以执行以下操作:
函数doGet(e){
//获取范围的值
var sheet=SpreadsheetApp.getActiveSheet();
var jobsCreated=sheet.getRange(12,2).getValue();
//把它串起来
var params=JSON.stringify({“number”:number=jobsCreated});
//返回JSON字符串
返回ContentService.createTextOutput(参数);
}
返回:
  • {“number”:123}
    如果
    jobsCreated
    是数字123,或
  • {“number”:“Mangos”}
    如果
    jobsCreated
    是字符串“Mangos”
查看部署的脚本以及要使用的


注: 您应该避免在JSON中使用函数,这些函数将丢失其作用域,并且必须使用eval()将它们转换回函数



您的问题在于如何使用
JSON.stringify

在JSON中,函数不允许作为对象值。

该函数将省略或更改为
null
JavaScript对象中的任何函数

也就是说,您可以执行以下操作:
函数doGet(e){
//获取范围的值
var sheet=SpreadsheetApp.getActiveSheet();
var jobsCreated=sheet.getRange(12,2).getValue();
//把它串起来
var params=JSON.stringify({“number”:number=jobsCreated});
//返回JSON字符串
返回ContentService.createTextOutput(参数);
}
返回:
  • {“number”:123}
    如果
    jobsCreated
    是数字123,或
  • {“number”:“Mangos”}
    如果
    jobsCreated
    是字符串“Mangos”
查看部署的脚本以及要使用的


注: 您应该避免在JSON中使用函数,这些函数将丢失其作用域,并且必须使用eval()将它们转换回函数



好的,当我回复@Aerials时,再次感谢您的帮助。鉴于其他代码不适用于我的脚本,我决定创建一个新的工作表和脚本作为测试,并使用与它完全相同的代码


但是现在再仔细检查一下,我不认为这是个问题,因为它得到的号码没有任何问题。它正在由GoogleAnalytics插件填充的单元格。现在,当再次设置加载项以获取信息时,来自网站的脚本再次返回空值。因此,问题似乎在于脚本在使用附加组件填充时从工作表(仅发布版本)获取信息

好的,当我回复@Aerials时,再次感谢您的帮助。顺便说一句,看到其他代码不适用于我的脚本,我决定创建一个新的工作表和脚本作为测试,使用与它工作时完全相同的代码


但是现在再仔细检查一下,我不认为这是个问题,因为它得到的号码没有任何问题。它正在由GoogleAnalytics插件填充的单元格。现在,当再次设置加载项以获取信息时,来自网站的脚本再次返回空值。因此,问题似乎在于脚本在使用附加组件填充时从工作表中获取信息(仅发布版本)

修改后是否重新发布了脚本的新版本?2。删除Browser.msgbox和tryI已使用新版本重新发布,我尝试了所有更改,现在的版本号为16,关于Browser.msgbox,我也尝试了不使用它的版本。我把它放在那里只是为了检查我是否得到了一些东西,但是我没有使用try
console.log(jobsCreated)
测试它。和borel查看stackdriver中的日志。您应该保存一个新版本(创建一个新版本v17),然后发布。或者,只需尝试
/dev
url@ITVHR看看我的答案是否适合你。修改后你是否重新发布了新版本的脚本。删除Browser.msgbox和tryI已使用新版本重新发布,我现在的版本号为16,我尝试了所有更改,关于Browser.msgbox i