我有一个谷歌应用程序脚本,如果单元格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")
}
}
}
}
答案 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();
}
}
}