Google脚本 - 如果Sheet2中已不存在,则将columnC数据从Sheet21复制到columnC Sheet2

时间:2016-07-27 10:22:23

标签: google-apps-script google-sheets

我正在编写我的第一个脚本之一,并试图查看其他类似的问题。

我有两张纸: sheet1:新数据(只有C列才有意义,其他所有内容都可以忽略其他列) sheet2:旧数据(但如果还没有,则需要使用sheet1新数据进行更新)。要添加的数据应该在现有数据之后的C列末尾。

我的代码有以下编译错误。 我需要 - 获取Column C Sheet2的最后一行。然后检查ColumnC sheet2中是否存在Column C sheet1,如果不存在则 - 从sheet1复制到sheet2 C列。

更新代码:

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 last_row = CountColC();


//assumes headers in row 1
var r = target_sheet.getRange(1,2, lastRow - 1);

//Note the use of an array
r.sort([{column: 3, ascending: true}]);


  // Process sheet
  _updateSpreadsheet(source_sheet, target_sheet);

}

//gets last row in Column C
function CountColC(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for(var i = data.length-1 ; i >=0 ; i--){
    if (data[i][2] != null && data[i][2] != ''){
      return i+1 ;
    }
  }
}

function _updateSpreadsheet(source_sheet, target_sheet) {
  var last_row = CountColC();  
  var source_data = source_sheet.getDataRange().getValues();
  var target_data = target_sheet.getDataRange().getValues();
  var resultArray = [];

  for (var n = 1 ; n < source_data.length ; n++) {
    var keep = true;
    for(var p = 1 ; p < target_data.length ; p++) {
      if (new Date(source_data[n][2]).getTime() == new Date(target_data[p][2]).getTime()) {
        keep = false; break;
      }
    }
    Logger.log(keep);
    if(keep){ resultArray.push([source_data[n][2]])};
  }
  last_row++;
  Logger.log(resultArray);
  target_sheet.getRange(last_row,1,resultArray.length,resultArray[2].length).setValues(resultArray);
//  target_data.push(n);
}

提前致谢:)

   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.lastColumn();


//assumes headers in row 1
var r = target_sheet.getRange(2,1, lastRow - 1, 3);

//Note the use of an array
r.sort([{column: 3, ascending: true}]);


  // Process sheet
  _updateSpreadsheet(source_sheet, target_sheet);

}

//gets last row in Column C
function CountColC(){
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for(var i = data.length-1 ; i >=0 ; i--){
    if (data[i][2] != null && data[i][2] != ''){
      return i+1 ;
    }
  }
}
function _updateSpreadsheet(source_sheet, target_sheet) {
  var last_row = target_sheet.CountColC();  
  var source_data = source_sheet.getDataRange().getValues();
  var target_data = target_sheet.getDataRange().getValues();
  var resultArray = [];

  for (var n = 1 ; n < source_data.length ; n++) {
    var keep = true;
    for(var p = 1 ; p < target_data.length ; p++) {
      if (new Date(source_data[n][2]).getTime() == new Date(target_data[p][2]).getTime()) {
        keep = false; break;
      }
    }
    Logger.log(keep);
    if(keep){ resultArray.push([source_data[n][2]])};
  }
  last_row++;
  Logger.log(resultArray);
  target_sheet.getRange(last_row,1,resultArray.length,resultArray[2].length).setValues(resultArray);
//  target_data.push(n);
}

1 个答案:

答案 0 :(得分:1)

而是打电话

var last_row = target_sheet.CountColC();

请使用

var last_row = CountColC();