首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并google sheets:匹配特定的col值,并将数据合并到2个不同的工作表中

合并google sheets:匹配特定的col值,并将数据合并到2个不同的工作表中
EN

Stack Overflow用户
提问于 2018-03-09 01:51:15
回答 1查看 547关注 0票数 0

我想问一下,是否有任何可能的方法来设置一个简单版本的应用程序脚本,类似于下面的附加组件。

https://chrome.google.com/webstore/detail/merge-sheets/gdmgbiccnalapanbededmeiadjfbfhkl?utm_source=ablebits

基本上,我得到了工作表1和工作表3,这两个工作表都有一个公共键列,每个单元格中都有特定的值,我希望将这两个工作表与该列中的数据进行映射,然后更新其他工作表中的整行数据(例如,如果我更新了工作表3,则它会将该列的值映射到工作表1中,然后将数据粘贴到相应的行中)

我已经想出了一个可以运行的代码,但没有做出任何更改,请任何人告诉我如何才能将其修改为类似于上述附加组件的简单版本?提前谢谢。

我想在代码运行后将数据从表3填充到表1,而来自列C的数据在两个表中都是匹配的,请参见下面的示例,谢谢!

例如,表1突出显示的行中的数据与表3相同的查询值的键值为列C,而行序列与表3不同(请参见下一张照片,谢谢!)

正如您在表3中看到的,根据与表1匹配的列C键值,将整行的数据插入到正确的行中。

代码语言:javascript
复制
function myFunction2(){
    // Get your spreadsheet and the sheets "TB" and "2"
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet1 = ss.getSheetByName("Sheet 1");
    var sheet3 = ss.getSheetByName("Sheet 3");

    // Get the range on sheet "TB"
    var tabsheet1 = sheet1.getRange(2, 2, sheet1.getLastRow(), 
    sheet1.getLastColumn());

    // Get the values to compare
    var datasheet1 = tabsheet1.getValues();
    var datasheet3 = sheet3.getRange(2, 2, sheet3.getLastRow(), sheet3.getLastColumn());

    for(var i = 0; i < datasheet1.length; i++){

        for(var j = 0; j < datasheet3.length; j++){

            // Compare data: if they're the same, put the value 
            if(datasheet1[i][0]=(datasheet3[j][0]) == 0){

                //if(datasheet1[i][0].localeCompare(datasheet3[j][0]) == 0){

                datasheet1[i][1] = datasheet3[j][1];
            }
        }
    }

    // Take the modified tab and put it on the spreadsheet
    tabsheet1.setValues(datasheet1);
}
EN

回答 1

Stack Overflow用户

发布于 2018-03-09 08:19:37

您需要将sheet 3的数据复制到sheet 1,在这种情况下,当sheet 3和sheet 1的C列的值相同时,您需要将sheet 3的行复制到sheet 1,因为sheet 3和sheet 1的行序不同。如果我的理解是正确的,那么这个修改如何?

修改点:

为了检索从C列到最后一列的值,它使用getRange(2, 3, sheet1.getLastRow(), sheet1.getLastColumn()).

  • In你的脚本,datasheet3是范围。

  • 关于if(datasheet1[i][0]=(datasheet3[j][0]) == 0){,为了比较日期,我使用了getDisplayValues()。通过此方法,以字符串形式检索的值为compared.

修改后的脚本:

代码语言:javascript
复制
function myFunction2(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName("Sheet 1");
  var sheet3 = ss.getSheetByName("Sheet 3");
  var tabsheet1 = sheet1.getRange(2, 3, sheet1.getLastRow(), sheet1.getLastColumn());
  var datasheet1 = tabsheet1.getValues();
  var datasheet1d = tabsheet1.getDisplayValues(); // Added
  var tabsheet3 = sheet3.getRange(2, 3, sheet3.getLastRow(), sheet3.getLastColumn()); // Added
  var datasheet3 = tabsheet3.getValues(); // Modified
  var datasheet3d = tabsheet3.getDisplayValues(); // Added
  for (var i = 0; i < datasheet1.length; i++) {
    for (var j = 0; j < datasheet3.length; j++) {
      if (datasheet1d[i][0] == datasheet3d[j][0]) { // Modified
        datasheet1[i] = datasheet3[j]; // Modified
      }
    }
  }
  tabsheet1.setValues(datasheet1);
}

参考资料:

如果我误解了你的问题,请告诉我。我想修改一下。那时候,为了修改,你能分享样张吗?当然,请将您的私人信息从其中删除。

编辑1:

代码语言:javascript
复制
function myFunction2(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName("Sheet 1");
  var sheet3 = ss.getSheetByName("Sheet 3");
  var tabsheet1 = sheet1.getRange(2, 3, sheet1.getLastRow() - 1, sheet1.getLastColumn() - 2); // Modified
  var datasheet1 = tabsheet1.getValues();
  var datasheet1d = tabsheet1.getDisplayValues(); // Added
  var tabsheet3 = sheet3.getRange(2, 3, sheet3.getLastRow() - 1, sheet3.getLastColumn() - 2); // Added
  var datasheet3 = tabsheet3.getValues(); // Modified
  var datasheet3d = tabsheet3.getDisplayValues(); // Added
  for (var i = 0; i < datasheet1.length; i++) {
    for (var j = 0; j < datasheet3.length; j++) {
      if (datasheet1d[i][0] == datasheet3d[j][0]) { // Modified
        datasheet3[j].push(""); // Modified
        datasheet1[i] = datasheet3[j]; // Modified
      }
    }
  }
  tabsheet1.setValues(datasheet1);
}

编辑2:

代码语言:javascript
复制
function myFunction2(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName("comment_log");
  var sheet3 = ss.getSheetByName("CM");
  var tabsheet1 = sheet1.getRange(2, 3, sheet1.getLastRow() - 1, sheet1.getLastColumn() - 2); // Modified
  var datasheet1 = tabsheet1.getValues();
  var datasheet1d = tabsheet1.getDisplayValues(); // Added
  var tabsheet3 = sheet3.getRange(2, 3, sheet3.getLastRow() - 1, sheet3.getLastColumn() - 2); // Added
  var datasheet3 = tabsheet3.getValues(); // Modified
  var datasheet3d = tabsheet3.getDisplayValues(); // Added
  for (var i = 0; i < datasheet1.length; i++) {
    for (var j = 0; j < datasheet3.length; j++) {
      if (datasheet1d[i][0] == datasheet3d[j][0]) { // Modified
        if (datasheet1[i].length != datasheet3[j].length) {
          for (var k = 0; k < datasheet1[i].length - datasheet3[j].length; k++) {
            datasheet3[j].push(datasheet1[i][datasheet1[i].length - 1]);
          }
        }
        datasheet1[i] = datasheet3[j]
      }
    }
  }
  tabsheet1.setValues(datasheet1);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49179452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档