如何使用单元格值查找匹配的工作表名称?

时间:2019-04-23 19:31:16

标签: google-apps-script

我正在尝试找到一种将信息从一张纸复制到另一张纸的方法。我知道如何从工作表中查找要复制的信息,但是在查找要复制到的工作表时遇到了麻烦。我想根据原始工作表中的值复制到工作表中。

我在C列中有一个姓名列表,例如。 John,Mark和Will从第40行开始。然后,我想将John的信息行复制到标题为“ John”的表中,然后将Mark的信息复制到标题为“ Mark”的表中,以此类推,以便总结每个人的信息在自己的表上。我在使用C列中找到的值(人员姓名)时遇到麻烦,然后使用该值查找具有协调名称的工作表。

function CopyInfo() {
var CopyFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Summary");
var ColumntoSearch = 3;
var LastRow = CopyFrom.getLastRow();

 //Gets column to search for names to compare
  var Range = CopyFrom.getRange(40, ColumntoSearch, LastRow, 1);
  var Values = Range.getValues();

 //Sets the amount of data to copy over
  var NumberofColumns = 11;
  var NumberofRows = 1;

//Compares all the names in the Summary sheet
 var d=0;
  for(var i=0;i<Values.length;i++) {
     var Name = CopyFrom.getRange(i-d+40, 3);
     var CopyTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(Name);
    if(Name == ????????){
      var RangetoCopy=CopyFrom.getRange(i-d+40,1,NumberofRows,NumberofColumns); 
     var DestRange=CopyTo.getRange(CopyTo.getLastRow()+1,1,NumberofRows,NumberofColumns);
      RangetoCopy.copyTo(DestRange);
      d++;

     }
  }
}

1 个答案:

答案 0 :(得分:0)

  • 您要使用Summary工作表中“ C”列中检索到的工作表名称,将Summary工作表中的值复制到每个工作表中。
  • “ A:K”列中有一些要复制的值。
  • 例如,当Summary工作表的第45行具有值a45, b45, c45, d45, e45, f45, g45, h45, i45, j45, k45时,这些值将被复制到工作表名称c45的最后一行的正下方。 li>

如果我的理解是正确的,那么该修改如何?我认为您的脚本几乎是正确的。所以我稍微修改了您的脚本。

修改后的脚本:

function CopyInfo() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // Added
  var CopyFrom = ss.getSheetByName("Summary"); // Modified
  var ColumntoSearch = 3;
  var LastRow = CopyFrom.getLastRow();

  //Gets column to search for names to compare
  var Range = CopyFrom.getRange(40, ColumntoSearch, LastRow, 1);
  var Values = Range.getValues();

  //Sets the amount of data to copy over
  var NumberofColumns = 11;
  var NumberofRows = 1;

  //Compares all the names in the Summary sheet
  // var d=0; // Removed
  for (var i = 0; i < Values.length; i++) {
    var Name = Values[i][0]; // Modified
    var CopyTo = ss.getSheetByName(Name); // Modified
    if (Name) { // Modified
      if (!CopyTo) CopyTo = ss.insertSheet(Name); // Added
      var RangetoCopy = CopyFrom.getRange(i + 40, 1, NumberofRows, NumberofColumns); // Modified
      var DestRange = CopyTo.getRange(CopyTo.getLastRow() + 1, 1, NumberofRows, NumberofColumns);
      RangetoCopy.copyTo(DestRange);
      // d++; // Removed
    }
  }
}

注意:

  • 在此修改的脚本中,如果找不到工作表名称,则会插入工作表名称的新工作表。如果您不想插入新的工作表,请将if(!CopyTo) CopyTo = ss.insertSheet(Name)替换为以下脚本。

    if (CopyTo) {
      var RangetoCopy = CopyFrom.getRange(i + 40, 1, NumberofRows, NumberofColumns); 
      var DestRange = CopyTo.getRange(CopyTo.getLastRow() + 1, 1, NumberofRows, NumberofColumns);
      RangetoCopy.copyTo(DestRange);
    }
    

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。