【发布时间】: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 < 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