Javascript search()方法在Google脚本中不起作用

Javascript search()方法在Google脚本中不起作用,javascript,google-apps-script,Javascript,Google Apps Script,更新:好的,这是一个简单的修复。我选择了要输入的数字列,进入格式->数字->纯文本,突然我的功能开始工作了!如果我将其更改为Format->Number->Normal或其他任何内容,它会抛出一个错误 我有一个方法,如果字符串的开头小于9,它会将零添加到字符串的开头。我得到一个错误,函数search未定义,如第4行的issn.search。什么可能导致这个问题?具体来说,googleapps脚本中的错误是TypeError:cannotcallmethod“search”of undefine

更新:好的,这是一个简单的修复。我选择了要输入的数字列,进入格式->数字->纯文本,突然我的功能开始工作了!如果我将其更改为Format->Number->Normal或其他任何内容,它会抛出一个错误


我有一个方法,如果字符串的开头小于9,它会将零添加到字符串的开头。我得到一个错误,函数
search
未定义,如第4行的
issn.search
。什么可能导致这个问题?具体来说,googleapps脚本中的错误是
TypeError:cannotcallmethod“search”of undefined。(第5行)

函数fixissn(issn){
//Logger.log(“旧issn为”+issn);
//如果ISSN中有破折号,则需要9个字符,而不是8个字符
如果(issn.search(“-”>-1){
var-mis=9;
}else if(issn.search(“-”)==-1){
var-mis=8;
}
//如果ISSN小于9或8(mis),则在开头加零
而(issn.length0){
//零添加到ISSN的开头
issn=0+issn
}
//Logger.log(“固定到新issn”+issn);
返回issn;
}

为了回应@epascarello所说的,似乎没有传入值。很难说,但这可能是因为您在一系列单元格上使用了此函数,其中一些单元格是空的。要绕过该问题,您可以尝试以下方法:

function fixissn(issn){
    if (issn !== undefined) {
        //Logger.log("Old issn is " + issn);
        //if there's a dash in the ISSN, it need 9 characters instead of 8
        if (issn.search("-") > -1) {
            var mis = 9; 
        } else if (issn.search("-") == -1) {
            var mis = 8; 
        }

        //if the ISSN is less than 9 or 8 (mis), add zeros to the beginning
        while (issn.length < mis && issn.length > 0) {
            //zero added to beginning of ISSN
            issn = 0 + issn
        }
        //Logger.log("fixed to new issn " + issn);
    }
    return issn;
}
函数fixissn(issn){
如果(issn!==未定义){
//Logger.log(“旧issn为”+issn);
//如果ISSN中有破折号,则需要9个字符,而不是8个字符
如果(issn.search(“-”>-1){
var-mis=9;
}else if(issn.search(“-”)==-1){
var-mis=8;
}
//如果ISSN小于9或8(mis),则在开头加零
而(issn.length0){
//零添加到ISSN的开头
issn=0+issn
}
//Logger.log(“固定到新issn”+issn);
}
返回issn;
}

您确定要传入一个值吗?有一条注释掉的日志消息回显了该值,所以我假设您已经检查过了。另外,您是在传递字符串还是数字?如果
issn
是一个数字,尝试对其应用
search
将给出一个错误,而不是消息中的错误?就在那儿用一个别的吧!问题在于调用函数fixissn而不是函数。尝试只在issn not null上添加一个条件,并强制它为字符串,这样就不会再有任何问题了。
function fixissn(issn){
    if (issn !== undefined) {
        //Logger.log("Old issn is " + issn);
        //if there's a dash in the ISSN, it need 9 characters instead of 8
        if (issn.search("-") > -1) {
            var mis = 9; 
        } else if (issn.search("-") == -1) {
            var mis = 8; 
        }

        //if the ISSN is less than 9 or 8 (mis), add zeros to the beginning
        while (issn.length < mis && issn.length > 0) {
            //zero added to beginning of ISSN
            issn = 0 + issn
        }
        //Logger.log("fixed to new issn " + issn);
    }
    return issn;
}