簡體   English   中英

Google腳本indexOf不適用於自定義元素

[英]Google script indexOf not working for custom element

這是我在Google表格中的腳本示例。 如何設置indexOf方法在所有情況下均有效?

const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MySheet");
var myArray = sheet.getRange("A7:A10").getValues();

//this works (of course) -> returns 2
sheet.getRange('L1').setValue(myArray.indexOf(myArray[2]));

//this don't work (but it can be my fault in typing..) -> returns -1
sheet.getRange('L2').setValue(myArray.indexOf("Thing"));

//this don't work (why?) -> returns -1
sheet.getRange('L3').setValue(myArray.indexOf(sheet.getRange("A9").getValues()));

//to check my value, this works
Browser.msgBox(myArray[2]);

我哪里錯了? 單元格中的所有內容都是字符串。

getValues()返回一個數組數組(也稱為二維數組)。

因此,基本上,如果您的工作表中填充了以下數據:

+---+------+----+--------+
|   |  A   | B  |   C    |
+---+------+----+--------+
| 1 | John |    | Doe    |
| 2 | Jane |    | Doe    |
| 3 | John | Q. | Public |
+---+------+----+--------+

調用getValues()將為您提供一個2D數組,如下所示:

var myArray = sheet.getRange('A1:C3').getValues();

Logger.log(myArray);

/* Logger output will look something like this:
[
    ["John", null, "Doe"],
    ["Jane", null, "Doe"],
    ["John", "Q.", "Public"]
]
*/

因此,回到工作表, myArray.indexOf("Thing")試圖將字符串對象“ Thing”與數組對象進行匹配; 這將始終為-1。 您需要重構代碼以考慮二維數組。

我嘗試了一下,最后意識到我需要將數據轉換回一維數組。 這是我正在使用的代碼。 它與您的不完全一樣,但它執行類似的操作。

function test() {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  sh.getRange('A1:D5').clear();
  sh.getRange('A1:A5').setValues([["One"],["Twp"],["Three"],["Four"],["Five"]]);//just intializing my data
  var mA = sh.getRange("A1:A5").getValues();
  var dA=[];
  for(var i=0;i<mA.length;i++){
    sh.getRange(i+1,2).setValue(mA[i][0]);
    dA.push(mA[i][0]);
    sh.getRange(i+1,3).setValue(dA.indexOf(mA[i][0]));
    sh.getRange(i+1,4).setValue(dA.indexOf(sh.getRange(i+1,2).getValue()));
  }
}

因此,您可以將其添加到代碼中以使其正常工作。

var myArray = sheet.getRange("A7:A10").getValues();
  var mA=[];
  for(var i=0;myArray.length;i++){
    mA.push(myArray[i][0]);
  }

然后使用mA.indexOf()代替myArray.indexOf();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM