当前位置: 首页 > 知识库问答 >
问题:

合并谷歌工作表:与特定的co值相匹配,并将数据合并到2个不同的工作表中

汤嘉平
2023-03-14

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

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

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

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

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

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

如表3所示,根据与表1匹配的col C key col值,将整行数据插入到正确的行中。

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);
}

共有1个答案

端木兴国
2023-03-14

您要将第3页的数据复制到第1页。对于这种情况,当工作表3和工作表1的C列的值相同时,您希望将工作表3的行复制到工作表1,因为工作表3和工作表1的行的顺序不同。如果我的理解是正确的,那么这个改装怎么样?

  • 为了检索从C列到最后一列的值,它使用getRange(2,3,sheet1.getLastRow(),sheet1.getLastColumn())
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);
}
  • getDisplayValues()

如果我误解了你的问题,请告诉我。我想修改它。届时,为了修改,能否共享样本表?当然,请从中删除您的私人信息。

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);
}
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);
}
 类似资料:
  • 我正在寻找一种方法来合并特定行值从多个电子表格时,某些验证得到满足。 场景:我目前有Sheet1、Sheet2、Sheet3,我想要的是在满足验证时将Sheet2和Sheet3中的数据合并到Sheet1中。 表1: 第2张: 第3张: 基于上述示例,我在sheet1单元格A2中使用了此函数 因此,如果列E“类型”是“新玩家”(验证),它会自动添加表2中的行值。 我想要的是,如果类型为“New Pl

  • 我知道如何复制工作表,但这将导致多个工作表。我需要的是一个输出工作表,一个接一个地包含所有的工作表。 目前我正在做的是将每个工作表导出为< code>DataTable,然后逐个导入: 但这样,我就失去了单元格样式和文本格式 有没有办法用保留样式?

  • 我有3个谷歌工作表选项卡,所有相同的列,并想添加第四个选项卡,显示所有的数据从其他3个选项卡,其中列K="Q116"。 很容易从3张工作表导入所有数据:=查询({'Sheet 1'!A3:Q50;'Sheet 2'!A3:Q50;'Sheet 3'!A3:Q50}) 但是,我无法计算出如何添加过滤器/where子句来仅返回列K(在所有工作表中)='Q116'的结果。 有什么想法吗? 谢谢

  • 所以我有 1500 个 Excel 工作簿,每个工作簿都有 10 张结构完全相同的工作表。我尝试将多个Excel工作簿合并到一个文件中,并使用以下代码成功: 谢谢,努尔贝克

  • 我正在将一些旧的iTextSharp代码升级到新的iText 7库。我很难确定将2个PDF MemoryStream合并为一个PDF MemoryStream的正确方法,该PDF MemoryStream包含来自两个源PDF MemoryStream的所有页面。这看起来很简单,我认为下面的代码设置正确,但生成的PDF内存流只包含第一个文件。第二个PDF文件从未出现,也从未连接到第一个PDF文件。

  • 我有30张单独的工作表,需要合并成一张有多个选项卡的工作表。我可以使用下面的脚本来完成这项工作,但每次都会创建一个新的工作表。当30张单独的工作表中的一张或全部更新时,我只希望这个脚本更新或重写以前创建的“主工作表”。 我正在寻找一个表,其中包含从每个地区的标签。这将允许我与单独更新的所有信息共享一个主控表。