通过复选框移动行

问题描述 投票:0回答:1

我在 Google Sheets 中有一个 WS,其中有 3 个选项卡(工作表)。

1-) 有一个用于提交新任务的表单,以及通过过滤功能根据当前月份每个条目旁边带有复选框的任务过滤视图。

2-) 是否已从上述工作表或选项卡中的任务输入表单中复制了表单条目。

3-) 具有已完成任务的列表,当单击复选框(在上面的第一个选项卡中)时,应将其从条目表中移出。

我一直在尝试测试可以通过 Google 或 YouTube 找到的脚本。但是,它无法正常工作。由于我是新手,我无法诊断问题出在哪里。

问题是;

i-) 因为在第一个选项卡中,任务是过滤视图,所以复选框无法正常工作。因此,为了建立连接,我在条目表中添加了另一列,其中结果来自任务条目表单,如屏幕截图所示。Task Form Entries with the Additional Status Column

之后,我将此状态列连接到复选框。因此,当我单击某个复选框时,它会将“条目”选项卡中的相应单元格设置为 TRUE。

function moveChecked2(){
const sh = SpreadsheetApp.getActive();
const ss = sh.getSheetByName("Entries");
const targetSheet = sh.getSheetByName("Completed Tasks");


let data = ss.getRange(3,1,ss.getLastRow()-1,5).getValues();
let out = [];
for (let i = 0; i < data.length; i++){
if (data[i][4] == true){
out.push(data[i]);
ss.clearContents();
data.splice(i,1);
i--;
}
}
targetSheet.getRange(targetSheet.getLastRow()+1,1,out.length,5).setValues(out);
}

上面的代码运行良好。但是,停止工作并给出错误,指出代码最后一行中的“out.length”应至少为 1。它最初工作正常,当单击一个复选框时,它正在移动。现在,虽然我检查了一个或多个,但它给出了相同的错误。我尝试硬编码并输入 1 而不是 out.length。也没有用。

如果此代码有效,我将插入一个绘图作为按钮并指定此脚本来激活。

经过几个小时的反复试验,我决定尝试一下onEdit功能。我发现了一些不同的代码,它们适用于下拉值。我尝试自定义它们,以便在单击复选框时它们可以工作。也没能做到。

非常感谢任何帮助。预先感谢。

google-apps-script onclick
1个回答
0
投票

试试这个:

function moveChecked2() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Entries");
  const tsh = ss.getSheetByName("Completed Tasks");
  let vs = sh.getRange(3, 1, sh.getLastRow() - 2, 5).getValues();
  let out = [];
  let d = 0;
  for (let i = 0; i < vs.length; i++) {
    if (vs[i][4] == true) {
      out.push(vs[i]);
      sh.deleteRow(i + 3 - d++)
    }
  }
  tsh.getRange(tsh.getLastRow() + 1, 1, out.length, 5).setValues(out);
}
© www.soinside.com 2019 - 2024. All rights reserved.