Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
Google apps script 如何从谷歌应用程序脚本传回自定义错误消息?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 如何从谷歌应用程序脚本传回自定义错误消息?

Google apps script 如何从谷歌应用程序脚本传回自定义错误消息?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,从谷歌电子表格运行谷歌应用程序脚本时,如果其中一个谷歌API使用不当,电子表格顶部会显示红色的“butterbar”错误。此消息通常包含对脚本开发人员有用的信息(来自google api的错误消息,例如“范围的坐标或维度无效”),但不一定对电子表格用户有用(他们可以解决该问题的真实翻译) 我搜索了,但没有找到自定义此消息的方法。是否可以抛出您自己的错误消息?您可以尝试查看基类,该基类允许您添加警报框或其他对话框,以便在应用程序绑定到电子表格(例如msgBox())时与应用程序的用户交互。对于Do

从谷歌电子表格运行谷歌应用程序脚本时,如果其中一个谷歌API使用不当,电子表格顶部会显示红色的“butterbar”错误。此消息通常包含对脚本开发人员有用的信息(来自google api的错误消息,例如“范围的坐标或维度无效”),但不一定对电子表格用户有用(他们可以解决该问题的真实翻译)


我搜索了,但没有找到自定义此消息的方法。是否可以抛出您自己的错误消息?

您可以尝试查看基类,该基类允许您添加警报框或其他对话框,以便在应用程序绑定到电子表格(例如msgBox())时与应用程序的用户交互。对于DocumentApp,使用Ui类与其接口交互

我从未尝试过,但如果使用try…catch结构和throw语句,它也可以工作

干杯


Nicolas与任何javascript一样,您可以使用:

try {
  ...
}
catch (error) {
  throw new Error( "More meaningful error." );
{
即使问题不完全是你的,也有很多问题在使用中


我个人的观点是,最好检查函数的输入并抛出错误(比如),而不是从服务调用中捕获错误。使用try..catch的适当时机是在您没有实际方法验证参数时,如中所示。

以下是将脚本中的数据传递到错误消息中的最佳方法。首先设置一个全局变量对象来存储错误处理所需的数据。然后将数据存储到每个函数的
try{}
部分中的这个对象。最后,在
catch(e)
中调用将传递错误数据对象的
errHandler
函数。请参阅以下代码:
code.gs

var onErrObj = {}
function myFunction(){

 try{
  // function code goes here;
  // add more elements to onErrObj as desired;
 }catch(e){
      onErrObj['data1'] = 'someData';
      onErrObj['data'] = 'some Other Data';
      errHandler(e,'myFunction');
 }

 function errHandler(e,strFunc){
      var message = e.message+'\n in file: '+e.fileName+' on line: '+e.lineNumber;
      var sendto = 'yourname@youremail.com';
      var subject = 'My App encountered an error occured in '+strFunc;
      var errProps = JSON.stringify(this.onError);
      message = subject+'\n'+message+'\n onError: '+errProps;
      GmailApp.sendEmail(sendto, subject, message); 
}

谢谢我不知道自定义异常会取代butterbar文本,这基本上正是我想要的。正如您所说,事先检查以验证传递给api的参数正是我计划要做的。@Mogsdad,这确实非常有用,但对于服务器上启动的函数来说。但是,如果使用google.script.run调用相同的函数,抛出的错误将记录在控制台中。有没有一种方法可以绕过这个问题,并且仍然在butterbar中显示消息?@chibis,当通过google.script.run调用脚本时,它会被赋予自己的执行实例。我是这么想的,不用尝试。。。“butterbar”是呈现给脚本或容器用户的UI的一部分,它是另一个执行实例,google.script.run实例无法访问。尽管如此,这听起来应该是一个问题本身,所以去问吧!这确实回答了这个问题,但仅供将来参考:当将其与sheets API(也称为“Deploy as web app”)一起使用时,Google仍然会返回200 OK,在一些HTML响应中会出现自定义错误。请参见谷歌的问题跟踪程序。翻转了示例代码底部的右括号。