有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaScriptGoogleSheets:复制单元格并在另一个选项卡中排序

我有一个来自多个项目的大文档列表(“MDR”),我试图将它们按进行中/完成进行排序。看起来有点像这样:

^{tb1}$

我从数据验证下拉列表中选择状态

我需要第二个选项卡(“GPO”)来过滤第一个MDR选项卡中正在进行的项目,所以它是这样的:

^{tb2}$

另外,如果我在Doc13上得到了修订,我想在第二个选项卡上添加到他的位置上:

^{tb3}$

我尝试使用查询和筛选,但它不起作用,因为我还需要在“GPO”选项卡中分配信息,这样在添加/删除行时信息就会放错位置

我也尝试过为它制作一个宏,但没有成功,当我更改项目状态时,无法将其设置为触发,也没有找到将其排序到正确行的方法

我无法在MDR选项卡中添加过滤器并在其中写入,因为它还用于其他活动

可以通过宏来完成吗

或者用脚本会更容易些?如果是,我应该研究什么来找到我的答案

我感谢任何帮助


共 (2) 个答案

  1. # 1 楼答案

    function myfunc101() {
      const ss = SpreadsheetApp.getActive();
      const sh = ss.getSheetByName('Sheet1');
      const sh2 = ss.getSheetByName('Sheet2');
      sh2.clearContents();
      const sh3 = ss.getSheetByName('Sheet3');
      sh3.clearContents();
      const [hA,...vs] = sh.getDataRange().getValues();
      let inProg = vs.map(r=>{if(r[2]=='In progress'){return r}}).filter(e=>e);
      let done = vs.map(r=>{if(r[2]=='Done'){return r}}).filter(e=>e);
      inProg.unshift(hA);//add headers
      sh2.getRange(1,1,inProg.length,inProg[0].length).setValues(inProg);
      done.unshift(hA);//add headers
      sh3.getRange(1,1,done.length,done[0].length).setValues(done);
    }
    

    表1:

    Project Document Status
    1 Doc11 Done
    1 Doc12 In progress
    1 Doc13 Done
    2 Doc21 In progress
    2 Doc22 Done
    2 Doc23 In progress

    表2:

    ^{tb2}$

    第3页:

    Project Document Status
    1 Doc11 Done
    1 Doc13 Done
    2 Doc22 Done