我在代码中得到了这个错误:
TypeError:无法在对象2066中找到函数子字符串。(第50行,归档“代码”)
下面这个更具体一点:
if (InputString.substring(0, 10) = "[DUPLIKAT ")
下面是脚本:
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var entries =
[
// {name : "Längen berechnen", functionName : "CountCellLength"}
];
spreadsheet.addMenu("Script Menü", entries);
};
function CountCellLength()
{
/*
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssCurrent = ss.getActiveSheet();
if (ss.getActiveSheet().getName() != "Duplikate")
{
Browser.msgBox("Not designed for this sheet.");
return;
}
var RowCount = ss.getLastRow();
var CurrentRow = ss.getActiveCell().getRow();
var cellValue;
for (var i = 5; i < RowCount; i++) {
cellValue = ssCurrent.getRange(i, 2, 1, 1).getValue();
ssCurrent.getRange(i, 5).setValue(cellValue.length);
}
*/
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Duplikate");
var RowCount= ss.getLastRow();
var InputRange = ss.getRange(5, 2, RowCount-4);
var data = InputRange.getValues();
var InputString, OutputString;
var StringNumber;
for (var i = 0; i < RowCount; i++) {
InputString = data[i][0];
if (InputString.substring(0, 10) = "[DUPLIKAT ")
{
OutputString = ""
} else {
OutputString = InputString
}
OutputString = OutputString.replace("(nl)", "");
OutputString = OutputString.replace("(nb)", "");
OutputString = OutputString.replace("<$06><$00>", "HELDNAME");
OutputString = OutputString.replace("<$06><$01>", "BURGNAME");
OutputString = OutputString.replace("<$07><$00><$02>", "XXX");
/*
for (var j = 0 ; j < 256 ; j++)
{
StringNumber = j.toString(16);
if (StringNumber.length == 1)
{
StringNumber = "0" + StringNumber.toUpperCase();
} else {
StringNumber = StringNumber.toUpperCase();
}
OutputString = OutputString.replace("<$" + StringNumber + ">", "");
}
*/
//ss.getRange(i+5, 5).setValue(OutputString);
ss.getRange(i+5, 6).setValue(OutputString.length);
}
}
function InsertDuplicate()
{
//Festlegen des aktuellen Spreadsheets
var ss = SpreadsheetApp.getActiveSpreadsheet();
//Das derzeit geöffnete Sheet
var ssCurrent = ss.getActiveSheet();
//Unser Duplikat Sheet
var ssDuplicates = ss.getSheetByName("Duplikate");
//Andere Variabeln
var DuplicateInfo, DuplicateIndexRow, DuplicateNumber;
var DuplicateRow;
//Festlegen der Position, in der wir uns befinden
ssCurrentColumn = ssCurrent.getActiveCell().getColumn();
//Wenn wir nicht in der ersten Spalte sind, verlassen wir die Funktion
if (ssCurrentColumn != 1) {
return;
}
//Zelleninhalt abrufen und auf DUPLIKAT püfen
DuplicateInfo = ssCurrent.getActiveCell().getValue();
if (DuplicateInfo.substring(10, 0) == "DUPLIKAT: ")
{ DuplicateIndexRow = DuplicateInfo.substring(14,10);
} else {
return;
}
DuplicateRow = ssDuplicates.getRange(DuplicateIndexRow, 7).getValue();
Browser.msgBox(DuplicateRow);
//Browser.msgBox(DuplicateRow);
//Browser.msgBox("End reached!!!");
}
发布于 2016-11-18 23:35:36
就像错误说的那样。您的InputString变量不是您所认为的那样。它是一个javascript 对象,而不是一个字符串。
Javascript与对象一起工作,因此(一开始很奇怪)字符串也是一个具有所谓方法(特定对象类型的助手函数)的对象。字符串对象确实包含子字符串方法,但“对象对象”不包含子字符串方法。
为了帮助你解决这个问题。您能否使用console.log将该变量登录到控制台,这样我们就知道该变量包含了什么?
发布于 2016-11-18 23:37:42
我看到了两个问题,但它们可能不是唯一的问题:
substring只在字符串上工作,所以如果从电子表格读取的值是数字,那么它将失败,正如您可以看到的那样。
若要强制将值强制为字符串,您可以代替:
InputString = data[i][0];用途:
InputString = data[i][0] + '';与空字符串相连接将强制数字结果值为字符串。
第二:
if (InputString.substring(0, 10) = "[DUPLIKAT ")不是等号的正确用法:
=是赋值,例如,当您将值放入变量时==是相等,用于比较两个值。在上面的if语句中,您希望比较两个值,看看左边的值是否等于"[DUPLIKAT "。因此,您需要两个等于(如果您愿意的话,三个等于是一个要查看的主题):
if (InputString.substring(0, 10) == "[DUPLIKAT ")
https://stackoverflow.com/questions/40687483
复制相似问题