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

Google脚本-将Sheet21中的columnC数据复制到columnC Sheet2,如果Sheet2中还没有columnC数据

经佐
2023-03-14

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

我有两张表:Sheet1:新数据(只有C列感兴趣,其他列中的所有内容都可以忽略)Sheet2:旧数据(但如果尚未存在,则需要使用Sheet1新数据更新)。要添加的数据应该在存量数据之后的C列末尾。

我拥有的代码有以下编译错误。我需要-获取C列Sheet2的最后一行。然后检查列C表1是否存在于列C表2中,如果不存在-从表1复制到表2列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个答案

孟佑运
2023-03-14

而是打电话

var last_row = target_sheet.CountColC();

请使用

var last_row = CountColC();
 类似资料:
  • 我想要实现的目标: 当最后一列指示TRUE时,我将向相应的收件人发送一封电子邮件(创建一个按钮并将其分配给脚本) 仅当最后一列指示TRUE时将数据从Sheet1移动/复制到Sheet2 移动到Sheet2的数据将写入新行(追加新行) Sheet1中的数据将被删除,但不会影响Sheet2中的数据。 问题是什么: 数据不会从表1移动到表2 以下是我的代码:

  • 我想用5-10个不同的用户测试我的应用程序,我写了用于登录应用程序的Webdriver脚本,但我不知道如何在Jmeter中使用CSV数据配置来不同的并发用户名。请帮帮我。

  • 在SQL Server中,如何将数据从一个表复制/追加到具有相同架构的另一个表中? 编辑: 假设有一个问题 它使用与表2中相同的模式和数据创建表1。 有没有这样的短查询只将整个数据复制到一个已经存在的表中?

  • 问题内容: 我正在使用Microsoft Sql Server Management Studio。我目前有一个包含数据的现有数据库,我将其称为DatabaseProd。我还有一个第二个数据库,其中包含用于测试的数据,因此数据既不完全正确也不是最新的。我将这个数据库称为DatabaseDev。 但是,DatabaseDev现在包含新添加的表和新添加的列等。 我想将此新模式从DatabaseDev复

  • 我有一个行动项目谷歌表,上面有这些栏: A-ID-A系列#1、2、3等 B-分配-分配操作项的日期 C-product-项目或区域的短文本名称 D-操作项-操作项的文本说明 电子所有者-项目分配给谁,这通常只是一个像Bob L这样的名字,或者有时是多个人Bob/Ted F-到期日 G-状态-挂起、正在处理等 h-上次更新-由onEdit脚本更新 i-上次编辑者-由onEdit脚本更新 j-owne

  • 问题内容: 我必须使用 Query* 将 具有数据 的 表从一个数据库 复制 到另一个数据库 。我知道如何在数据库中复制带有数据的表。但是我不确定如何在两个数据库之间进行复制。 * 我必须复制大量的表,因此我需要使用查询的任何快速方法… 任何人都请帮忙…提前感谢… 问题答案: 您可以使用相同的方法在一个数据库中复制表, 但是可以使用完全限定的表名,如下所示: 这将创建一个新的表在数据库从表whih