为什么.indexof()返回-1;当项目存在于给定数组中时? | Google脚本

-SheetData变量仅获取当前工作表上给定范围的前2列。

-WeeksRow-在单独的工作表“总计”上;我有一年中每个星期的开始星期日期,例如:“ 1月1日”,“ 1月8日”,“ 1月15日”等。此数组(WeeksRow)捕获此行。

function ImportData(){
  var SheetData = [{}];
  var WeeksRow = [{}];

SheetData = sheet.getRange(4,1,sheet.getDataRange().getLastRow()-4,1).getvalues();


  var CurrentSheetName = Utilities.formatDate(sheet.getRange("B2").getvalue(),spreadsheet.getSpreadsheetTimeZone(),"dd MMMM");

  var TotalsSheet = spreadsheet.getSheetByName("Totals");

  WeeksRow = TotalsSheet.getRange(1,TotalsSheet.getLastColumn()).getDisplayValues();

  WeeksRow = String(WeeksRow).split(",").map(function(s) {return s.trim();});

  var ColumnToSelect = WeeksRow.indexOf(CurrentSheetName);
  Logger.log(CurrentSheetName)
  Logger.log(WeeksRow)
  Logger.log(ColumnToSelect)

执行后的日志输出为:

[19-11-04 20:26:31:457 EST] 22 January

[19-11-04 20:26:31:458 EST] [Week Starting:,01 January,08 January,15 January,22 January,29 January,05 February,12 February,19 February,26 February,05 March,12 March,19 March,26 March,02 April,09 April,16 April,23 April,30 April,07 May,14 May,21 May,28 May,04 June,11 June,18 June,25 June,02 July,09 July,16 July,23 July,30 July,06 August,13 August,20 August,27 August,03 September,10 September,17 September,24 September,01 October,08 October,15 October,22 October,29 October,05 November,12 November,19 November,26 November,03 December,10 December,17 December,24 December,]

[19-11-04 20:26:31:458 EST] -1.0


您可以看到我要查找的商品是1月1日;它显然存在于第二个元素的数组中;我正在尝试使用.indexof()

那为什么.indexof()命令返回-1.0

我还尝试针对arry中的每个元素搜索“ 01 January”,但找不到。使用以下代码:

var i=0;
  while(i <= WeeksRow.length){
    if (String( WeeksRow[i]) == "01 January"){
      Browser.msgBox("found at "+i);
      break;
    }else{
      i++;
    }
    if (i == WeeksRow.length){
     Browser.msgBox("not found") 
    }
  }
fishin8 回答:为什么.indexof()返回-1;当项目存在于给定数组中时? | Google脚本

WeeksRow的每个元素的开头似乎都有空格,您需要在搜索之前将其删除。

var WeeksRow = String(WeeksRow).split(",").map(function(s) {return s.trim();});
,

尝试此版本。离工作还差一点。

function ImportData(){
  var spreadsheet=SpreadsheetApp.getActive();
  var sheet=spreadsheet.getActiveSheet();
  var SheetData = [];
  var WeeksRow = [];
  SheetData = sheet.getRange(4,1,sheet.getLastRow()-4,1).getValues();
  var CurrentSheetName= Utilities.formatDate(new Date(sheet.getRange("B2").getValue()),spreadsheet.getSpreadsheetTimeZone(),"dd MMMM");
  var TotalsSheet = spreadsheet.getSheetByName("Totals");
  WeeksRow = TotalsSheet.getRange(1,TotalsSheet.getLastColumn()).getDisplayValues()[0];
  var WeeksRow = String(WeeksRow).split(",");
  var ColumnToSelect = WeeksRow.indexOf(CurrentSheetName);
  Logger.log(CurrentSheetName)
  Logger.log(WeeksRow)
  Logger.log(ColumnToSelect)
}

您还可能想了解有关minimum reproducible example

的信息 ,

我不知道它能否解决您的问题:

  WeeksRow = TotalsSheet.getRange(1,TotalsSheet.getLastColumn()).getDisplayValues();

  WeeksRow=WeeksRow.toString();

  var lgth;
  do 
  {
    lgth = WeeksRow.length;
    WeeksRow = WeeksRow.replace(/,/g,",");
  }
  while (WeeksRow.length < parseInt(lgth)); 
  WeeksRow = WeeksRow.split(",");
本文链接:https://www.f2er.com/3163453.html

大家都在问