我有一个电子表格,我想用它来存储项目时间表。我有能力添加项目及其开始日期以及它们的长度直到完成 - 这是在“项目”表上。这会在单独的工作表中反映出来,因为每个项目的单元格都有特定颜色,具体取决于它们设置的日期 - 这是“时间轴”工作表。我想要删除项目时遇到问题。我想单击项目名称的单元格,然后从我创建的菜单中单击“删除项目”,然后在“项目”工作表和“时间轴”工作表上删除项目行。循环让我感到困惑,我并没有完全理解它。我应该使用数组在两张纸上存储项目名称,然后使用它来互相引用,或者...... ???这是我到目前为止所拥有的。
function clearProject() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName('Projects');
var sourceRange = sourceSheet.getActiveRange();
var height = sourceRange.getValues().length;
var rowPosition = sourceRange.getRowIndex();
var targetSheet = ss.getSheetByName('Timeline');
var targetSheetValues = targetSheet.getRange(3, 1, 15, 49);
var targetProjectNames = targetSheet.getRange(3, 1, 15, 1).getValues();
var sourceProjectNames = sourceSheet.getRange(2, 1, 15, 1).getValues();
var targetHeight = targetSheet.getRange(3, 1, 15, 1).length;
var targetRowPosition = targetSheet.getRange(3, 1, 15, 1).getRowIndex();
for(var i=0; i > sourceProjectNames.length; i++){
if(i == targetProjectNames){
targetSheet.deleteRows(targetRowPosition, targetHeight);
}
else{
break;
}
}
//This deletes the row of the active cell
//ss.getActiveSheet().deleteRows(rowPosition, height);
Logger.log(i);
}
另外,如果你知道用简单英语解释循环的任何资源,请给我一个链接。谢谢你的帮助!
编辑:在“if”语句中将比较从=更改为==。
编辑2:更改了for
循环中的比较。另外,更改了if
语句的比较。
循环仍然无法正常工作。当我检查i
的日志时,我得到0.0
。这是新代码......
function clearProject() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName('Projects');
var sourceRange = sourceSheet.getActiveRange();
var height = sourceRange.getValues().length;
var rowPosition = sourceRange.getRowIndex();
var targetSheet = ss.getSheetByName('Timeline');
var targetSheetValues = targetSheet.getRange(3, 1, 15, 49);
var sourceRangeValues = sourceSheet.getRange(2, 1, 15, 1);
var targetProjectNames = targetSheet.getRange(3, 1, 15, 1).getValues();
var sourceProjectNames = sourceSheet.getRange(2, 1, 15, 1).getValues();
var targetHeight = targetSheet.getRange(3, 1, 15, 1).length;
var targetRowPosition = targetSheet.getRange(3, 1, 15, 1).getRowIndex();
for(var i=0; i < sourceRangeValues.length; i++){
if( targetProjectNames[i][0] == sourceRange[i][0]){
targetSheet.deleteRows(targetRowPosition, targetHeight);
Logger.log(i);
}
}
//This deletes the row of the active cell
//ss.getActiveSheet().deleteRows(rowPosition, height);
Logger.log(i);
}
答案 0 :(得分:1)
for(var i=0; i > sourceProjectNames.length; i++)
应该是
for(var i=0; i < sourceProjectNames.length; i++)
2.您正在将一个整数与一个不正确的二维数组进行比较
if(i == targetProjectNames)
相反,你应该做这样的事情。
if( targetProjectNames[i][0] == sourceProjectNames[i][0])
3.如果第一次比较失败,您的break;
语句将结束循环。所以完全删除其他部分
这些是我可以预先注意到的一些事情。如果您仍然遇到问题,请尝试使用更多信息编辑您的问题。