Google脚本:将值从一个工作表复制到另一个工作表以确定范围

时间:2020-07-16 13:20:51

标签: function google-apps-script google-sheets

我在一列中有两张具有唯一ID的工作表。我需要确保每当在一个工作表(Sheet1)中添加新的ID时,它将被复制到另一工作表(Sheet2)中的最后一个空行。 IMPORTRANGE不能以动态方式工作,其他表格中添加的任何静态信息与各自的ID均无关。

在另一个线程[1]中,我得到了开发此脚本的帮助。但是,此脚本会将数据插入到A列的另一张工作表中。如何修改脚本,以便可以确定要脚本插入数据的具体范围(在工作表2中)。

更新:我以创建此电子表格为例。我试图确保脚本执行计算(即,添加在第一个可用空行中未重复的vlaues),从“ Sheet2”中的cel C10开始。如果我需要以某种方式可以更改该范围,那也将非常好:https://docs.google.com/spreadsheets/d/1abESAXFrOHoqRQRNqQGfmAFxlbD10wlprAf1tca4y7o/edit#gid=132361488

谢谢!

function updateSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = "Sheet1"; 
  var destinationSheet = "Sheet2";
  var source_sheet = ss.getSheetByName(sourceSheet);
  var target_sheet = ss.getSheetByName(destinationSheet);
  var lastCol = target_sheet.getLastColumn();
  var lastRow = target_sheet.getLastRow();
  if (lastRow > 1) { // <--- Added
    var r = target_sheet.getRange(2,1, lastRow - 1, lastCol);
    r.sort([{column: 1, ascending: true}]);
  }
  _updateSpreadsheet(source_sheet, target_sheet);
}

function _updateSpreadsheet(source_sheet, target_sheet) {
  var last_row = target_sheet.getLastRow();  
  var source_data = source_sheet.getRange("A4:A" + source_sheet.getLastRow()).getValues(); // <--- Modified
  var target_data = target_sheet.getDataRange().getValues();
  var resultArray = [];
  for (var n = 0 ; n < source_data.length ; n++) { // <--- Modified
    var keep = true;
      for(var p in target_data) {
       if (source_data[n][0] == target_data[p][0]) {
         keep = false; break;
       }
    }
    var columnsToKeep = [0];
    var tempData = [];
    if(keep){
      for(var c in columnsToKeep){ tempData.push(source_data[n][columnsToKeep[c]])}
      resultArray.push(tempData);
    }     
  }
  last_row++;
  resultArray = resultArray.filter(String);  // <--- Added
  if(resultArray.length>0){
    target_sheet.getRange(last_row,1,resultArray.length,resultArray[0].length).setValues(resultArray);
  }
}

[1] Google Script: Append new values in column to another sheet

1 个答案:

答案 0 :(得分:0)

target_sheet.getRange(last_row,1,resultArray.length,resultArray[0].length)
.setValues(resultArray);

此行

  • 取出存储在变量target_sheet中的工作表
  • 访问定义的范围
  • 设置值

访问代码中使用的范围的语法为getRange(row, column, numRows, numColumns)

其中起始列是数字-在您的情况下,它是1,它对应于列A

如果要将起始列从A修改为B

只需更改您的范围定义

getRange(last_row,1,resultArray.length,resultArray[0].length)

getRange(last_row,2,resultArray.length,resultArray[0].length)