我正在尝试在Google表格的范围内确定几个条件。标识值后,脚本应将找到值的列返回给我,然后调用函数删除该列。以下是我整理的代码,但遇到了问题。
删除时出现错误。
//Delete Column
function deleteColumn(col) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var numCol = sheet.getRange("A1:T23").getNumColumns();
var data = sheet.deleteColumn(col);
for (var i = numCol; i >= 0; i--) {
var remove = data;
Logger.log(remove + " was removed");
}
}
//find columns
function findColumn() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var data = sheet.getRange("A1:T23");
var values = data.getValues();
for (var i = 1; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (values[i][j] == "Notes" || values[i][j] == "Billable" || values[i][j] == "Total") {
var col = j+1;
Logger.log("columns numbers found" + col);
deleteColumn(col);
}
}
}
}
我不太了解的部分思考是何时开始删除列。这有效地更改了列数,因此我尝试从列数开始并往回移动(从右到左)。
越界错误是由于您的循环范围在这里:
(var i = 1; i < values.length; i++)
该values
数组基于0,表示从中索引0..values.length-1
。
您的某些语句混淆了对象类型。始终仔细检查。
var data = sheet.deleteColumn(col);
您将看到deleteColumn()
返回一个Sheet
-与您已经拥有的工作表相同。这是为链接完成的,它使您可以在一个语句中对工作表执行多项操作。您的变量名暗示您希望收到已删除列的副本,并且您的log()
呼叫尝试显示它……因此您可能会[object]
在日志中看到该变量。
消除行或列时,您应该倒数计时。看来您没有在所有正确的地方都这样做。调用函数findColumn()
具有增加的循环(当删除列时将不同步),而调用函数deleteColumn()
具有减少的循环(可能根本不需要)。为什么deleteColumn()
仍然存在?如果它达到了预期的效果,它将删除所有数据。
最后,由于要删除列,因此应使用外部循环遍历列。continue
如果满足删除列的条件,则可以删除(退出)行上的内部循环。你是说有内在循环吗?它在每一行中查找这三个值。如果您只想查看Headers,则为第1行(数组中的索引0)。
function deleteNBTColumns() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var dataRange = sheet.getRange("A1:T23");
var data = sheet.getRange("A1:T23");
var values = data.getValues();
var numRows = values.length;
var numCols = values[0].length;
for (var col = numCols-1; col > 0; col--) { // count down over columns
for (var row = 0; row < numRows; row++) { // count up over rows
switch (values[row][col]) { // examine cell contents
case "Notes":
case "Billable":
case "Total": // in these cases...
sheet.deleteColumn(col+1); // delete column in sheet (1-based)
continue; // continue with next column
break; // can't get here, but good practice
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句