数据数组将行值列表塞到一个对象中

时间:2018-12-12 17:28:27

标签: javascript arrays google-apps-script google-sheets

我创建了一个按钮,该按钮将检查一行日期并搜索今天的日期。一旦有了该日期,我计划使用其位置来检查当天的已接收项目列表。enter image description here我的数据数组出现问题,该数据数组似乎正在编译该行中所有列出的值变成单个对象?当我手动检查值时(例如,data [0] [2]),结果应为单个日期(12/2/18),但是当我要求数据长度时,它返回1,调试器向我显示map()是“ DECEMBER,12/1 / 2018,12 / 2/2018 ....”。我猜这是我的问题所在,因为我正在使用数据长度属性初始化循环。基本上,我需要知道如何访问那些列值,而不仅仅是行。理想情况下,我希望能够基于这些计数器值来检索另一个单元格的位置。因此,举例来说,沿着-在给定r为行计数器值而c为列计数器值的情况下 data[1]

这是我到目前为止所拥有的:

var today = dailySheet.getRange(r+1,c);

是否还有其他类似于“长度”的属性,它可以计算数组的列而不是行?

1 个答案:

答案 0 :(得分:0)

这是您的代码:

function dailyButton0(){
  var ss = SpreadsheetApp.openById("1RhhHuelCBVWWXQQQ9j3jiRCScsirofzwDleH-nxeLGw");
  var dailySheet = ss.getSheetByName("Daily Papers");
  var d = new Date();
  var m = d.getMonth();
  var mrange;
  var strDate = Utilities.formatDate(d,"CST","MM/d/yyyy");
  if (m == "10"){mrange = dailySheet.getRange("A95:AF95");} //November
  else if(m == "11"){mrange = dailySheet.getRange("A104:AF104");} //December
  var data = mrange.getValues();   
  var dataLength = data.length;
  Browser.msgBox("data02 ="+data[0][2]); //returns 12/2/18 correctly
  Browser.msgBox("Data Length = "+dataLength); //returns 1
  for( var c = 1; c < data.length; c++){ 
    if (data[0][c] == strDate) {
      Browser.msgBox(data[0][c]+" matches "+strDate);
    }
  }
}

data.length始终为1,因为数据是一个看起来像[[col1,col2,col3 .....]]]的数组,即单行。

我有种感觉,你想要这样的东西:

function dailyButton(){
  var ss = SpreadsheetApp.openById("1RhhHuelCBVWWXQQQ9j3jiRCScsirofzwDleH-nxeLGw");
  var dailySheet = ss.getSheetByName("Daily Papers");
  var d = new Date();
  var m = d.getMonth();
  var mrange;
  var strDate = Utilities.formatDate(d,"CST","MM/d/yyyy");
  if (m == 10){mrange = dailySheet.getRange("A95:AF95");} //November
  else if(m == 11){mrange = dailySheet.getRange("A104:AF104");} //December
  var data = mrange.getValues();   
  var dataLength = data.length;
  Browser.msgBox("data02 ="+data[0][2]); //returns 12/2/18 correctly
  Browser.msgBox("Data Length = "+dataLength); //returns 1
  for(var c=0;c<data[0].length;c++){ 
    if (data[0][c]==strDate){
      Browser.msgBox(data[0][c]+" matches "+strDate);
    }
  }
}

由于getValues()返回零基本数组,所以我从0开始运行循环。因此data [0] [0]是列1中的值。所以我的循环是for(var c=0;c<data[0].length;c++)。因此data [0] .length是第一行也是唯一行的长度。因此,这使您可以遍历行中的所有列。

我希望这会有所帮助。如果我对自己的假设不正确,请发表评论让我知道,我很乐意删除我的答案。