【问题标题】:Very simple Google-apps script results in syntax error非常简单的 Google-apps 脚本会导致语法错误
【发布时间】:2017-04-14 00:14:59
【问题描述】:

我有一组 Google 应用。我作为独立应用程序运行的脚本,通常嵌入到 Google 协作平台中。昨天我复制了我的一个功能脚本并像过去一样修改了很多次,但是现在新的脚本没有运行,它失败并出现语法错误。盯着这个极其简单的脚本看了好几个小时没有得到解决,我认为这可能是 Google 的问题,或者是我的域(公司域)中的一些问题。

function doGet() {
   var t = HtmlService.createTemplateFromFile('index');  
   var ss = SpreadsheetApp.openById('sheet_ID');
   var lrN = ss.getSheetByName('NCMR').getLastRow();

t.statArray = ss.getSheetByName('NCMR').getRange('Z3:Z'+lrN+'').getValues();

return t.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

当我尝试运行时从执行记录中截取:

[17-04-13 06:39:26:322 PDT] Sheet.getRange([Z3:Z23]) [0.072 seconds]
[17-04-13 06:39:26:381 PDT] Range.getValues() [0.058 seconds]
[17-04-13 06:39:26:382 PDT] Function.apply([[]]) [0 seconds]
[17-04-13 06:39:26:389 PDT] Execution failed: SyntaxError: Syntax error. (line 8, file "Code") [0.254 seconds total runtime]

来自调试器的错误:

 We're sorry, a server error occurred. Please wait a bit and try again.

然后它在调试器的左侧窗格中有以下内容:

<Unknown file>null [0]
Code : doGet [8]

任何帮助或见解将不胜感激。抱歉,如果这是一个搁置和/或已经回答。

编辑添加html文件:

index.html

<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
<base target="_top">
</head>
<body>
<center>
<table>
<tr><td><b> Id</b></td></tr>
<?= for (var i = 0; i < statArray.length; i++) { ?>
  <?= for (var j = 0; j < statArray[i].length; j++) { ?>
    <tr><td><?= statArray[i] ?></td>
  <?= } ?>
    </tr>
<?= } ?>
</table>
</center>
</body>
</html>

【问题讨论】:

  • 我相信当您尝试评估 HTML 文件时存在语法错误,它会在第 8 行或 t.evaluate 步骤中引发错误。你能分享你的 HTML 文件吗?
  • @Jack Brown:是的,你是个天才!它一直就在我面前,HTML 文件中的打印脚本应该是标准符号 ( . . . ?>),这是关于随意复制和粘贴的教训。但是,我仍然需要实际数组变量的打印脚本。谢谢!

标签: google-apps-script syntax-error


【解决方案1】:

供参考:问题的作者发现了问题/语法错误

错误的原因是 html 中使用的脚本中的语法错误,即修改:

<?= for (var i = 0; i < statArray.length; i++) { ?>

到一个标准的 scriptlet 标签

<? for (var i = 0; i < statArray.length; i++) { ?>

HTML代码应该如下:

<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
<base target="_top">
</head>
<body>
<center>
<table>
<tr><td><b> Id</b></td></tr>
<? for (var i = 0; i < statArray.length; i++) { ?>
  <? for (var j = 0; j < statArray[i].length; j++) { ?>
    <tr><td><?= statArray[i] ?></td>
  <? } ?>
    </tr>
<? } ?>
</table>
</center>
</body>
</html> 

【讨论】:

    【解决方案2】:

    您是否尝试过使用 index.html

    function doGet() {
       var t = HtmlService.createTemplateFromFile('index.html');  
       var ss = SpreadsheetApp.openById('sheet_ID');
       var lrN = ss.getSheetByName('NCMR').getLastRow();
    
    t.statArray = ss.getSheetByName('NCMR').getRange('Z3:Z'+lrN+'').getValues();
    
    return t.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
    }

    【讨论】:

    • 感谢您的建议。不幸的是,我刚刚尝试添加 .html 扩展名,但仍然失败:(
    • 嗯...你能提供你的 index.html 文件吗?
    • 当我使用空白 index.html 模板运行您的代码时,我收到 0 个错误。你可以调查一下。
    • 是的,它是 html 文件,感谢您的帮助和快速响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多