【问题标题】:Copy new rows to another sheet & copy changed rows to another sheet将新行复制到另一个工作表并将更改的行复制到另一个工作表
【发布时间】:2022-11-04 22:46:34
【问题描述】:

我设法将 2 个不同的工作簿放入 1 个电子表格中,将工作表名称更改为“今天”和“以前”,并在空白工作表中添加“启动器”和“转移”。我现在需要找到出现在“今天”而不是“以前”中的任何员工 ID,并将该行复制到工作表“starter”。

然后,我需要比较“今天”和“以前”中的员工 ID 列,如果其他列(例如位置)有任何差异,则将该行复制到“转移”表。

对于比较位,我确实从下面开始,但不知道如何遍历另一张表。 在 VBA 术语中,我会记下每个单元格并遍历下一张表,直到匹配员工 ID,然后比较其他列,如果有差异 - 用行数据填充“转移”表。

谷歌应用程序脚本的新手 - 尝试学习它并将我的 VBA 知识“转换”为此,但运气不佳!
任何帮助将非常感激!

var sh = SpreadsheetApp.getActive().getSheetByName('Today');
sh.activate();
var rg=sh.getRange(3,2,sh.getLastRow()-1,sh.getLastColumn());
var vA=rg.getValues();
vA.forEach(function(r,i){
if(r[1]) {
  var employeeID=r[1];
  var persontitle=r[2];
  var personfirstname=r[3];
  var personsurname=r[4];
  var birthday=r[7];
  var startdate=r[8];
  var region=r[13];
  var location=r[14];
  var position=r[15];
  var contractedhours=r[16];
  var workemail=r[18];

数据有 18 列。 第一列具有唯一标识符(员工 ID) 简而言之,这就是我想要做的:

如果“今天”上的员工 ID 不在“上一个”上,请将行复制到工作表“starter”。

如果“今天”上的员工 ID 在“上一个”上并且行详细信息不同,则将行复制到“转移”。

如果“今天”上的员工 ID 在“上一个”上并且行详细信息匹配,则忽略它

【问题讨论】:

  • 你好保罗,到目前为止你有什么尝试?您的代码被截断。另外,如果您遇到错误,请将其粘贴到此处 :-) 否则我们不会简单地提供您可以自己编写的代码

标签: google-apps-script google-sheets


【解决方案1】:

如果在今天而不是在上一次复制到 Starter

function lfunko() {
  const ss = SpreadsheetApp.getActive();
  const sh1 = ss.getSheetByName('Today');
  const sh2 = ss.getSheetByName('Previous');
  const sh3 = ss.getSheetByName('Starter');
  const vs1=sh1.getRange(3,1,sh1.getLastRow()-2,sh1.getLastColumn()).getValues();
  const vs2=sh2.getRange(3,1,sh2.getLastRow()-2).getValues().flat();
  let o = vs1.map((r,i) => {
    if(!~vs2.indexOf(r[0])) {
      return r;
    }
  });
  sh3.getRange(sh3.getLastRow() + 1, 1,o.length,o[0].length).setValues(o);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2020-08-14
    • 2017-09-14
    相关资源
    最近更新 更多