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.

参考: