该脚本工作正常,但不在“google-apps-script”中

Posted

技术标签:

【中文标题】该脚本工作正常,但不在“google-apps-script”中【英文标题】:The script is working fine, but not in 'google-apps-script' 【发布时间】:2017-11-08 22:06:02 【问题描述】:
function main() 

    var data = [['test1', 'element1', 'price1'], ['', 'element2', 'price2'], ['', 'element3', 'price3'], ['','' ,'' ], ['test2', 'anotherele1', 'anotherprice1'], ['', 'anotherele2', 'anotherprice2'], ['', 'anotherele3', 'anotherprice3'], ['', '', ''], ['test3', 'aaa', 123.0], ['', 'bbb', 345.0], ['', 'ccc', 678.0], ['', '', ''], ['','' , '']]

    var test = parseData(data)
    Logger.log(test)



function isBlank(line) 
    return line[0].trim() === '' && line[1].trim() === '';



function parseData(data) 

    const output = ;
    let currentGroupName = '';

    data.forEach(line => 
        if (isBlank(line))
            return; 
        

        if (line[0].trim().length > 0) 
            currentGroupName = line[0].trim();
        

        output[currentGroupName] = output[currentGroupName] || ;

        output[currentGroupName][line[1]] = line[2];
    );

    return output;

每当我在计算机上运行以下 JS 脚本时,它都能正常工作。但是,如果我尝试在 Adwords 上以 Preview(某种 Adwords 控制台)的身份运行,我会收到一个语法错误 Syntax errors in script: Missing ; before statement. (line 23)。请注意,第 23 行只是 let currentGroupName = '';。有没有一种干净的方法来解决这个问题?此代码适用于在您自己的计算机上以及使用 google-apps-scripts 进行测试。

这是我的问题的图片:

【问题讨论】:

【参考方案1】:

Tanaike 的解决方案应该可以解决您的问题。但请允许我添加更多背景信息。 Google Apps 脚本自 2009 年以来一直存在,它是 Ecmascript 5 的实现。let 语句和箭头运算符仅在 Ecmascript 6 及更高版本中受支持。

Google 的问题跟踪器上有一项功能请求,要求 App Script 支持 EcmaScript 6。 Apps Script 社区中的很多人一直在呼吁支持 Ecmascript 6。您可以通过为问题加注星标来表达自己的声音。

这是一个链接: https://issuetracker.google.com/issues/36764074

【讨论】:

【参考方案2】:

如果您想在 Google Apps 脚本中使用此脚本,则不能使用 let 和箭头运算符。那么下面的修改呢?

修改点:

    let 替换为var。 将data.forEach(line => 替换为data.forEach(function(line)

修改后的脚本:

function main() 
    var data = [['test1', 'element1', 'price1'], ['', 'element2', 'price2'], ['', 'element3', 'price3'], ['','' ,'' ], ['test2', 'anotherele1', 'anotherprice1'], ['', 'anotherele2', 'anotherprice2'], ['', 'anotherele3', 'anotherprice3'], ['', '', ''], ['test3', 'aaa', 123.0], ['', 'bbb', 345.0], ['', 'ccc', 678.0], ['', '', ''], ['','' , '']]
    var test = parseData(data)
    Logger.log(test)


function isBlank(line) 
    return line[0].trim() === '' && line[1].trim() === '';


function parseData(data) 
    const output = ;
    var currentGroupName = '';
    data.forEach(function(line)
        if (isBlank(line))
            return; 
        
        if (line[0].trim().length > 0) 
            currentGroupName = line[0].trim();
        
        output[currentGroupName] = output[currentGroupName] || ;
        output[currentGroupName][line[1]] = line[2];
    );
    return output;

结果:


  "test1": 
    "element1": "price1",
    "element2": "price2",
    "element3": "price3"
  ,
  "test2": 
    "anotherele1": "anotherprice1",
    "anotherele2": "anotherprice2",
    "anotherele3": "anotherprice3"
  ,
  "test3": 
    "aaa": 123,
    "bbb": 345,
    "ccc": 678
  

参考:

https://developers.google.com/apps-script/guides/services/#basic_javascript_features

如果我误解了你的问题,我很抱歉。

【讨论】:

test2=anotherele1=anotherprice1, anotherele2=anotherprice2, anotherele3=anotherprice3, test3=aaa=123.0, ccc=678.0, bbb=345.0, test1=element1=price1, element2=price2, element3=price3 我得到了这个结果,正常吗?为什么用 adword 替换 := @Dave 是的。在 GAS,= 表示数据被解析为 JSON。例如,当您检索值“price3”时,您可以通过test.test1.element3 检索它。如果要查看结构,可以使用Logger.log(JSON.stringify(test, null, "\t"))。我的答案的结果是使用它检索的。

以上是关于该脚本工作正常,但不在“google-apps-script”中的主要内容,如果未能解决你的问题,请参考以下文章

更新语句在正常模式下工作,但不在过程中

脚本在前端工作,但不在 wp-admin 中

脚本编辑器中的功能可以正常工作,但不能来自工作表自定义功能

Puppeteer 脚本在本地工作,但不在 EC2 AWS 上

qtcreator - exe 在 qtcreator 内部工作正常,但不在外部

ajax json 在本地但不在远程服务器上工作