首页 文章

在Google Apps脚本中打印到控制台?

提问于
浏览
54

我是编程新手(已经在Codecademy上学过一些JS课程) . 我正在尝试创建一个简单的脚本来确定,如果给出一个包含扑克游戏结果的电子表格,谁应该付钱给谁 . 我打开了Google Apps脚本,并编写了以下内容以开始使用:

function addplayerstoArray(numplayers) {

  var playerArray = [];

  for (i=0; i<numplayers; i++) {
    playerArray.push(i);
  }
}  

addplayerstoArray(7);

console.log(playerArray[3])

我们的想法是创建一个包含其中玩家总数的数组 . 运行代码时,我认为它会在控制台上打印“3” . 但什么都没发生 . 它说

“ReferenceError:”控制台“未定义 . ”

A)我不了解Google Apps脚本控制台如何处理打印,以便我可以看到我的代码是否完成了我想要的内容?

B)代码有问题吗?

5 回答

  • 4

    控制台不可用,因为代码在 Cloud 中运行,而不是在浏览器中运行 . 而是使用GAS提供的Logger类:

    Logger.log(playerArray[3])
    

    然后在视图>日志下的IDE中查看结果...

    这是logging with GAS的一些文档 .

    编辑:2017-07-20 Apps脚本现在还提供了Stackdriver Logging . 在View - Console Logs下的脚本编辑器中查看这些日志 .

  • 99

    只是为了构建上面的vinnief的hacky解决方案,我使用MsgBox如下:

    Browser.msgBox('BorderoToMatriz', Browser.Buttons.OK_CANCEL);
    

    它有点像断点,停止脚本并输出弹出框所需的任何字符串 . 我特别在Sheets中发现,我在Logger.log中遇到问题,这在大多数情况下提供了足够的解决方法 .

  • 11

    在google脚本项目中,您可以创建html文件(例如:index.html)或gs文件(例如:code.gs) . .gs文件在服务器上执行,您可以使用Logger.log作为@Peter Herrman描述 . 但是,如果函数是在.html文件中创建的,则它将在用户的浏览器上执行,您可以使用console.log . Chrome浏览器控制台可以通过Windows / Linux上的Ctrl Shift J或Mac上的Cmd Opt J进行viewed

    如果要在html文件上使用Logger.log,可以使用scriptlet从html文件中调用Logger.log函数 . 为此,您将插入<? Logger.log(某事)?>用你要记录的东西替换东西 . 标准的scriptlet,使用语法<? ...?>,执行代码而不明确地向页面输出内容 .

  • 5

    尽管 Logger.log() 在技术上是向控制台输出内容的正确方法,但它有一些烦恼:

    • 输出可能是非结构化的混乱,很难快速消化 .

    • 您必须首先运行脚本,然后单击“查看/日志”,这是两次额外的单击(如果您还记得Ctrl Enter键盘快捷键,则为一次) .

    • 你必须插入 Logger.log(playerArray) ,然后在调试之后你可能想要删除 Logger.log(playerArray) ,因此还需要1-2个步骤 .

    • 您必须单击“确定”关闭叠加层(还有一次额外点击) .

    相反,每当我想调试一些东西时,我都会添加断点(点击行号)并按下Debug按钮(bug图标) . 当您为变量赋值时,断点很有效,但是当您启动变量并希望稍后查看它时,断点不太好,这与op尝试做的类似 . 在这种情况下,我会通过输入“x”(x标记点!)强制中断条件以抛出运行时错误:

    enter image description here

    与查看日志比较:

    enter image description here

    调试控制台包含更多信息,比日志覆盖更容易阅读 . 这种方法的一个小好处是,如果保持干净的代码是你的事情,你永远不必担心用一堆日志记录命令污染你的代码 . 即使您输入“x”,您也不得不记得在调试过程中删除它,否则您的代码将无法运行(内置清理措施,yay) .

  • 5

    回答OP问题

    A)我不了解Google Apps脚本控制台如何处理打印,以便我可以看到我的代码是否完成了我想要的内容?

    Google Apps脚本项目的.gs文件上的代码在服务器上运行,而不是在Web浏览器上运行 . 记录消息的方法是使用Class Logger .

    B)代码有问题吗?

    正如错误消息所说,问题是 console 没有定义但是现在相同的代码会抛出其他错误:

    ReferenceError:未定义“playerArray” . (第12行,文件“代码”)

    那是因为playerArray被定义为局部变量 . 将该线移出该功能将解决此问题 .

    var playerArray = [];
    
    function addplayerstoArray(numplayers) {
      for (i=0; i<numplayers; i++) {
        playerArray.push(i);
      }
    }  
    
    addplayerstoArray(7);
    
    console.log(playerArray[3])
    

    现在代码执行时不会抛出错误,而是查看浏览器控制台,我们应该查看Stackdriver Logging . 在Google Apps脚本编辑器UI中,单击 View > Stackdriver Logging .

    附录

    2017年,谷歌发布了所有脚本Stackdriver Logging并添加了类控制台,因此包括类似 console.log('Hello world!') 之类的内容不会引发错误,但日志将在Google Cloud Platform Stackdriver日志服务而不是浏览器控制台上 .

    来自Google Apps Script Release Notes 2017

    2017年6月23日Stackdriver日志记录已从早期访问中移除 . 所有脚本现在都可以访问Stackdriver日志记录 .

    来自Logging > Stackdriver logging

    以下示例显示如何使用控制台服务在Stackdriver中记录信息 . function measuringExecutionTime(){
    //一个简单的INFO日志消息,使用sprintf()格式 .
    console.info('定时%s函数(%d参数)','myFunction',1);

    //在DEBUG级别记录JSON对象 . 日志已标记
    //使用日志查看器中的消息字符串和JSON内容
    //显示在“structPayload”下的扩展日志结构中 .
    var parameters = {
    isValid:是的,
    内容:'some string',
    时间戳:新日期()
    };
    console.log({message:'Function Input',initialData:parameters});

    var label ='myFunction()time'; //标记时间日志条目 .
    console.time(标签); //启动计时器 .
    尝试{
    myFunction的(参数); //功能到时间 .
    } catch(e){
    //记录错误消息 .
    console.error('myFunction()产生错误:'e);
    }
    console.timeEnd(标签); //停止计时器,记录执行持续时间 .
    }

相关问题