如何在列中的每一行重复谷歌脚本功能?

时间:2018-03-28 09:04:23

标签: google-apps-script google-sheets

我有一个谷歌应用程序脚本,如果单元格B2发生更改,则清除单元格L2和M2。

我想将此应用于B2:B的整个范围,如果发生变化,应该清除与其行匹配的单元格。因此,例如,如果B5发生变化,则应清除L5和M5。

任何人都可以帮助我或指出我正确的方向吗?我只是在这里搜索了1小时而无法实现它。

非常感谢!

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    TableView {
        id: tableView2
        anchors.fill: parent
        TableViewColumn {
            title: "Parameter Name"
            role: "one"
        }
        TableViewColumn {
            title: "Value"
            role: "two"
            delegate: myDelegate
        }
        model: myTestModel
    }

    Component {
        id: myDelegate
        Loader {
            property var roleTwo: model.two
            sourceComponent: typeof(roleTwo)=='boolean'? checkBoxDelegate: stringDelegate
        }
    }

    Component {
        id: checkBoxDelegate
        CheckBox{
            checked: roleTwo
            onCheckedChanged:{
                var pos = mapToGlobal(0, 0)
                var p = tableView2.mapFromGlobal(pos.x, pos.y)
                var row = tableView2.rowAt(p.x, p.y)
                if(row >= 0)
                    myTestModel.updateValue(tableView2.row, checked, "two")
            }
        }
    }

    Component {
        id: stringDelegate
        TextField {
            text: roleTwo
            onEditingFinished: {
                var pos = mapToGlobal(0, 0)
                var p = tableView2.mapFromGlobal(pos.x, pos.y)
                var row = tableView2.rowAt(p.x, p.y)
                if(row >= 0)
                    myTestModel.updateValue(tableView2.row, text, "two")
            }

        }
    }
}

1 个答案:

答案 0 :(得分:0)

您只需要从范围(See getRow() method from the documentation)获取行,您就可以直接使用它,例如:

function onEdit(e){
  var row = e.range.getRow();
  if(e.range.getA1Notation() == "B"+row && e.range.getSheet().getName() == "Sheet3") 
  {
    e.source.getRange("L"+row).clear();
    e.source.getRange("M"+row).clear();

  }
}

但是您的代码只处理单个单元格选择。这是一个进化,处理多个细胞选择:

function onEdit(e){
  var range = e.range;
  var row = range.getRow();
  // Check if column B and sheet "Sheet3"
  if(range.getColumn() == 2 && range.getSheet().getName() == "Sheet3") 
  {
    if(range.getHeight()>1)
    {
      // Multiple cells selection case
      var nbRow = range.getNumRows();
      var i;
      for(i =0; i < nbRow; i++)
      {
        var temp = row + i;
        e.source.getRange("L"+temp).clear();
        e.source.getRange("M"+temp).clear();
      }
    }
    else
    {
      // One cell selection case
      e.source.getRange("L"+row).clear();
      e.source.getRange("M"+row).clear();
    }
  } 
}