【问题标题】:Copying certain rows to duplicated sheet using macro使用宏将某些行复制到重复的工作表
【发布时间】:2021-04-24 10:56:41
【问题描述】:

我有一个谷歌表,我将其用作每月交接表,底部有待办事项列表。

待办事项列表有一个复选框,然后是几列信息(日期、任务和分配给谁)

To-Do List

我创建了一个按钮,该按钮运行一个宏来复制工作表,以便在月底创建一个复制工作表。

我想复制待办事项列表中尚未被“勾选”为已完成但我不太擅长谷歌应用脚​​本中的逻辑的任何任务。

谁能帮我编写 if 语句,将未勾选的行复制到重复的工作表或复制所有行然后删除勾选的行。

谢谢,乔

更新:玩了几个小时后,这就是我所拥有的:

function ToDoCopy() {
  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  
  var duplicateSheet = ss.getSheetByName("JUNE");
  var originalSheet = ss.getSheetByName("MAY");
  
  var lastRow = originalSheet.getLastRow() + 1;
  
  for(var j = 24; j <  lastRow; j++)
  {
    if(originalSheet.getRange(j,2).getValue() ==false && originalSheet.getRange(j,3).getValue() != 4)
    {
      var nextRow = duplicateSheet.getLastRow() +1;
      var getCopyRange = originalSheet.getRange('B' + j + ':P' + j);
      getCopyRange.copyTo(duplicateSheet.getRange(nextRow, 2));
    }
  }
}

它几乎可以工作了,但它会将复制的项目添加到新工作表的待办事项表下方,而不是将它们添加到顶部。我不知道如何解决这个问题!

(p.s. &amp;&amp; originalSheet.getRange(j,3).getValue() != 4 部分是一个隐藏行,我用于自动排序表格,'4' 表示它基本上是空的。

【问题讨论】:

  • 你在使用调试器吗?这有助于快速诊断软件问题。还可以考虑添加临时诊断输出语句来帮助修复您的代码。
  • 你能加一个Minimal Reproducible Example吗?例如一张有两张纸“JUNE”和“MAY”的纸?在为此编写解决方案时,您似乎有很多隐藏的行和潜在的隐藏功能。

标签: if-statement google-apps-script google-sheets logic


【解决方案1】:
function ToDoCopy() {
  const ss = SpreadsheetApp.getActive();
  const ssh = ss.getSheetByName("MAY");//source sheet
  const sshsr = 24;//start row
  const srg = ssh.getRange(sshsr, 1, ssh.getLastRow() - sshsr + 1, ssh.getLastColumn());
  const svs = srg.getDisplayValues();//useful for me when using checkboxes
  const dsh = ss.getSheetByName("JUNE");//destination sheet
  if (dsh.getLastRow() - sshsr + 1 > 0) {
    dsh.getRange(sshsr, 1, dsh.getLastRow() - sshsr + 1, dsh.getLastColumn()).clearContent().setDataValidation(null);//Clear destination range if not already cleared
  }
  let a = 0;//row add counter
  svs.forEach((r, i) => {
    if (r[1] == 'FALSE' && r[2] != 4) {
      ssh.getRange(sshsr + i, 1, 1, ssh.getLastColumn()).copyTo(dsh.getRange(sshsr + a++, 1));
    }
  });
}

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 2022-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多