根据单元格值删除列

第312章

我正在尝试在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据特定列中的单元格值删除行

来自分类Dev

根据单元格值删除 2 列

来自分类Dev

根据单元格值删除行

来自分类Dev

根据单元格值删除数据网格行

来自分类Dev

根据单元格值删除整个行

来自分类Dev

根据单元格数组值从矩阵中删除行

来自分类Dev

excel宏-如何根据单元格值删除行

来自分类Dev

OpenOffice:根据单元格值删除行

来自分类Dev

根据单元格值从 Pandas DataFrame 中删除行

来自分类Dev

根据单元格值删除多行,去除滞后

来自分类Dev

根据单元格内的值删除行,优化

来自分类Dev

根据单元格值添加/删除行

来自分类Dev

VBA 根据所选单元格删除列

来自分类Dev

熊猫-根据单元格和列中的条件更改单元格值

来自分类Dev

熊猫-根据单元格和列中的条件更改单元格值

来自分类Dev

如何根据列或单元格值复制行

来自分类Dev

根据单元格的值在Excel中隐藏多列

来自分类Dev

根据单元格值动态隐藏列

来自分类Dev

根据单元格的值在Excel中隐藏多列

来自分类Dev

VBA根据单元格值选择列

来自分类Dev

如何根据单元格值在Excel中过滤列

来自分类Dev

根据“单元格值匹配”列,使用“是”或“否”

来自分类Dev

如何根据单元格值隐藏列

来自分类Dev

根据单元格注释获取单元格值

来自分类Dev

根据值查找连续的单元格

来自分类Dev

根据单元格值隐藏行

来自分类Dev

根据单元格值隐藏行

来自分类Dev

根据索引交换单元格值

来自分类Dev

根据单元格值连接