我有一组看起来像这样的数据:
header row | header row | header row | header row project | date | LastName, FName | hours project | date | LastName, FName | hours project | date | LastName, FName | hours header row | header row | header row | header row project | date | LastName, FName | hours project | date | LastName, FName | hours project | date | LastName, FName | hours
我想将标题行从数组中删除。我以为我会使用ArrayLib.filterByDate
来做这件事,以为任何在我的时间范围内都没有包含有效日期的行都会被删除。
这是我尝试过的代码:
function removeHeaders(projectRange){
var tmpProjectRange = [];
tmpProjectRange = ArrayLib.filterByDate(projectRange, 1, new Date(2013-01-01), new Date(2015-01-01))
return tmpProjectRange;
}
我收到错误:“所选列应仅包含日期”。所以这种方法似乎不是一种选择。
现在,我正在尝试使用ArrayLib.filterByText
将第2列与有效数据数组进行比较:
function removeHeaders(projectRange){
var tmpEmployeeRange = [];
var tmpEmployeeList = [];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var shtEmp = ss.getSheetByName("Employees");
var empLastRow = shtEmp.getLastRow();
var strRange = "A2:A" + empLastRow;
//should contain a list of all the employees:
tmpEmployeeList = shtEmp.getRange(strRange).getValues();
tmpEmployeeRange = ArrayLib.filterByText(projectRange, 2, tmpEmployeeList);
return tmpEmployeeRange;
}
但由于某种原因,这也不起作用。在tmpEmployeeRange
中返回的唯一行是名称没有逗号的行(这些行具有TBD而不是姓氏,名字。)所以我不确定那里发生了什么,但我认为必须有一个更简单的方法来做到这一点。我想我可以迭代整个事情并删除我不想要的行。还有其他想法吗?
答案 0 :(得分:2)
如果我们假设查找具有有效日期的行的逻辑是正确的,则很容易迭代该范围并删除标题。
在这里,我从Detecting an "invalid date" Date instance in JavaScript借用了isValidDate()
函数。我还保留了第一个标题行 - 您可以通过删除row == 0
的检查来摆脱它。
// Iterate over all rows, keeping the first header row and
// any row with a valid date in the second column.
function removeHeaders(projectRange){
var tmpProjectRange = [];
for (row in projectRange) {
if (row == 0 || isValidDate(projectRange[row][1])) {
tmpProjectRange.push(projectRange[row]);
}
}
return tmpProjectRange;
}
// From https://stackoverflow.com/questions/1353684
// Returns 'true' if variable d is a date object.
function isValidDate(d) {
if ( Object.prototype.toString.call(d) !== "[object Date]" )
return false;
return !isNaN(d.getTime());
}