【问题标题】:Get the first empty row in multidimensionnal array获取多维数组的第一个空行
【发布时间】:2018-01-23 17:41:59
【问题描述】:

我有一个关于函数的问题,我想先看看多维数组。

解释我的问题:在工作表中,我通过项目管理我的路线图。一个项目由 4 行组成,其中我有一些信息(项目名称、估计团队、时间表......)。 在我的时间线中,我需要检索多个数组中的第一个空行(第一个非空行是 startDate)。 问题是,我在这个多维数组中有 4 个团队,并且(例如)项目 A 的开始日期可以在第一个团队数组中,但项目 B 的开始日期也可以在第三个团队数组中。

在我的函数中,我试图到达开始日期,但我的第一步是检查第一个数组...(代码中的 projectRange 和之后) 所以......我认为最好的方法应该是检查第一列中的每一行,然后像这样继续到 getLastColumn,对吧? 那么,我该如何管理我的 Loop 呢?

function findLastRow(column) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(roadmapSS);

  var startRow = 11;
  var startCol = 11;
  var dataLength = sheet.getLastRow()-(startRow+2);

  var rangeData = sheet.getRange(startRow, 2, sheet.getLastRow(), sheet.getLastColumn());
  var dataValues = rangeData.getValues();

  var projectsList = rangeData.getValues();
  var projectDatas = {};
  var projectRange = null;
  var projectName = null;
  var projectPlan = {};
  var realStart = null;

  for (var i = 0; i < dataLength; i+=4) {
    projectDatas = projectsList[i];

    var step = startRow+i;
    var realStartRange = startRow+i+1

    for (var j = 0; j < 1; j+=4) {
      projectName = projectDatas[j];
    }

    projectRange = ([step, startCol, 4, sheet.getLastColumn()]).toString();
    var projectPlan = sheet.getRange(step, startCol, 4, sheet.getLastColumn()).getValues();

    for (var k = 0; k < projectPlan.length; ++k) {
      realStart = projectPlan[k];

      for (var l = 0; l < realStart.length; ++l) {
        if (realStart[l] != '') {  
          break;
        }
      }
    }

    //sheet.getRange(realStartRange, 2).setValue(columnToLetter([l]))
    console.log(projectName, [l], columnToLetter([l]));
  }    
}

事实上,我试图在这个例子中得到 B 的第一列(因为它是第一个非空出现:

var projectTimeline = [
  ['','','A','A','','A'],
  ['','B','B','','B',''],
  ['','','','C','C',''],
  ['','','','','D','D']
]

【问题讨论】:

  • 你能展示一个数据集的例子以及它应该返回什么吗?
  • @LioraHaydont 我用一个例子来更新我的主题,我试图获取第一个“B”的列(和特定行)
  • 你为什么每第四行检查一次?如果您检查的第一行是第 11 行,那么 for (var i = 0; i &lt; dataLength; i+=4) 将检查行 11, 15, 19 等,因为您的初始数据集是 projectList[row][column],所以您最终会执行 projectDatas = projectsList[0]; 然后是 projectDatas = projectsList[4]; 然后是 projectDatas = projectsList[8]; 等等
  • 我在第一个循环中每隔 4 行检查一次以查找项目,因为一个项目由 4 行组成。在那之后,我有我的项目和相关的时间线范围。这是在第二个循环中,我想获得第一个非空列/行(我的第一个示例中的第一个 B)。在第二个循环中,我正在检查每一行。但这不起作用,该函数获取最后一个“D”而不是第一个“B”。

标签: javascript multidimensional-array google-apps-script google-sheets


【解决方案1】:

我找到了我的解决方案: 我先遍历列,然后遍历行。成功了,我创办了专栏:)

function findFirstDate (timeline) {
  for (var col = 0; col < timeline[0].length; col++) {
      for (var row = 0; row < 4; row++) {
        if (timeline[row][col] != '') {
          return [col];
        }
      }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2022-10-25
    • 2017-01-15
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多