Apps Script Checkbox True/False 在两张纸之间复制,这个逻辑可能吗?
Apps Script Checkbox True/False to copy between two sheets, is this logic possible?
我不确定如何更好地命名这个标题,所以我会提前道歉。我正在尝试确定我希望做的事情是否有可能,因为到目前为止我还不知道怎么做,但如果是的话,我想学习。我在下面有一个相当简单的脚本,但现在它所做的只是查看 sheet2,如果在 D10 中选中了复选框,它会在 D10 中选中 sheet3 上的复选框。这是完美的,并且按预期工作。我也将其设置为如果我取消选中 sheet2 上 D10 中的复选框,它将取消选中 sheet3 上 D10 中的复选框。
我希望看到我是否可以构建它的逻辑是,如果我现在取消选中 sheet3 上的 D10,它将取消选中 sheet2 上的 D10 。我已经尝试了几种不同的方法,通过添加与这里相反的方法,但无论我做什么,只要我取消选中它,它就会重新选中 sheet3 上的框,而 sheet2 上的框永远不会改变。
function onEdit(e) {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
var sheet3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet3');
if (sheet2.getRange('D10').isChecked()== true){
sheet3.getRange('D10').check();
}
else if (sheet2.getRange('D10').isChecked()== false){
sheet3.getRange('D10').uncheck();
}
{}}
上面是我的原始代码,但后来我尝试了类似下面的代码,结果相同。有什么想法或建议吗?
function onEdit(e) {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
var sheet3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet3');
if (sheet2.getRange('D10').isChecked()== true){
sheet3.getRange('D10').check();
}
if (sheet3.getRange('D10').isChecked()== false){
sheet2.getRange('D10').uncheck();
}
else if (sheet2.getRange('D10').isChecked()== false){
sheet3.getRange('D10').uncheck();
}
{}}
我相信你的目标如下。
- 您想勾选“sheet3”的“D10”的复选框,当勾选“D10”的复选框时,反之亦然。
- 您想取消选中“sheet3”的“D10”的复选框,当“D10”的复选框未选中时,反之亦然。
- 您想 运行 当“sheet2”和“sheet3”上的“D10”复选框被选中和取消选中时的脚本。
在你的脚本中,例如,在初始阶段,当“sheet2”的“D10”已经被选中时,“sheet3”的“D10”甚至被选中当“sheet3”的“D10”未选中时。我认为这可能是您遇到问题的原因。在这种情况下,下面的示例脚本怎么样?
示例脚本:
function onEdit(e) {
const {range, source} = e;
const sheetName = range.getSheet().getSheetName();
const obj = {"sheet2": "sheet3", "sheet3": "sheet2"};
if (range.getA1Notation() == "D10" && obj[sheetName]) {
source.getSheetByName(obj[sheetName]).getRange("D10")[range.isChecked() ? "check" : "uncheck"]();
}
}
- 在此示例脚本中,使用了
onEdit
的事件对象。
- 要切换 sheet 名称,使用 JSON 对象。
注:
- 如果要使用其他sheet名称,请修改
const obj = {"sheet2": "sheet3", "sheet3": "sheet2"};
。
- 在此示例脚本中,
getA1Notation()
用于检查单元格坐标。当你想使用事件对象来实现时,也可以将range.getA1Notation() == "D10"
修改为range.columnStart == 4 && range.rowStart == 10
.
参考:
我不确定如何更好地命名这个标题,所以我会提前道歉。我正在尝试确定我希望做的事情是否有可能,因为到目前为止我还不知道怎么做,但如果是的话,我想学习。我在下面有一个相当简单的脚本,但现在它所做的只是查看 sheet2,如果在 D10 中选中了复选框,它会在 D10 中选中 sheet3 上的复选框。这是完美的,并且按预期工作。我也将其设置为如果我取消选中 sheet2 上 D10 中的复选框,它将取消选中 sheet3 上 D10 中的复选框。
我希望看到我是否可以构建它的逻辑是,如果我现在取消选中 sheet3 上的 D10,它将取消选中 sheet2 上的 D10 。我已经尝试了几种不同的方法,通过添加与这里相反的方法,但无论我做什么,只要我取消选中它,它就会重新选中 sheet3 上的框,而 sheet2 上的框永远不会改变。
function onEdit(e) {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
var sheet3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet3');
if (sheet2.getRange('D10').isChecked()== true){
sheet3.getRange('D10').check();
}
else if (sheet2.getRange('D10').isChecked()== false){
sheet3.getRange('D10').uncheck();
}
{}}
上面是我的原始代码,但后来我尝试了类似下面的代码,结果相同。有什么想法或建议吗?
function onEdit(e) {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
var sheet3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet3');
if (sheet2.getRange('D10').isChecked()== true){
sheet3.getRange('D10').check();
}
if (sheet3.getRange('D10').isChecked()== false){
sheet2.getRange('D10').uncheck();
}
else if (sheet2.getRange('D10').isChecked()== false){
sheet3.getRange('D10').uncheck();
}
{}}
我相信你的目标如下。
- 您想勾选“sheet3”的“D10”的复选框,当勾选“D10”的复选框时,反之亦然。
- 您想取消选中“sheet3”的“D10”的复选框,当“D10”的复选框未选中时,反之亦然。
- 您想 运行 当“sheet2”和“sheet3”上的“D10”复选框被选中和取消选中时的脚本。
在你的脚本中,例如,在初始阶段,当“sheet2”的“D10”已经被选中时,“sheet3”的“D10”甚至被选中当“sheet3”的“D10”未选中时。我认为这可能是您遇到问题的原因。在这种情况下,下面的示例脚本怎么样?
示例脚本:
function onEdit(e) {
const {range, source} = e;
const sheetName = range.getSheet().getSheetName();
const obj = {"sheet2": "sheet3", "sheet3": "sheet2"};
if (range.getA1Notation() == "D10" && obj[sheetName]) {
source.getSheetByName(obj[sheetName]).getRange("D10")[range.isChecked() ? "check" : "uncheck"]();
}
}
- 在此示例脚本中,使用了
onEdit
的事件对象。 - 要切换 sheet 名称,使用 JSON 对象。
注:
- 如果要使用其他sheet名称,请修改
const obj = {"sheet2": "sheet3", "sheet3": "sheet2"};
。 - 在此示例脚本中,
getA1Notation()
用于检查单元格坐标。当你想使用事件对象来实现时,也可以将range.getA1Notation() == "D10"
修改为range.columnStart == 4 && range.rowStart == 10
.