Google 从 Gsheet 文件复制粘贴 Apps 脚本代码的问题

Issue with Google Apps Script code copy-paste from Gsheet file

我创建了一个代码,用于将值从最近上传的 Gsheet 文件复制粘贴到另一个。该代码应该只复制粘贴满足单元格条件的值。

问题是,此代码需要很长时间才能完成 运行,并且在出现 运行 时间错误之前没有完成所有值的复制。

该文件大约有 300.000 个单元格,要粘贴到第二个文件的最终金额大约有 90.000 个单元格。

有人对如何进行有建议吗?

非常感谢您的支持。

 function Master_Run_DB() {
 Copy_EUDB();
 
}

function Copy_EUDB() {          
    var myLink = extractLink_EUDB();
    sendData_EUDB(myLink);            
}

function extractLink_EUDB() {
    var newData = new Date().toLocaleString();
    var drive = DriveApp.getFolderById("link to file");
    var file = drive.getFilesByType(MimeType.GOOGLE_SHEETS);
    var link = file.next().getUrl();
    var ss = SpreadsheetApp.getActiveSpreadsheet();
 
    return link
 
}

function sendData_EUDB(link) {
 var mainSS = SpreadsheetApp.openById("link to file");
 var lastRow = mainSS.getSheetByName("Database").getLastRow();
  mainSS.getSheetByName("Database").getRange("A2" + ":R" + lastRow).clearContent();
 var baseSS = SpreadsheetApp.openByUrl(link);
 Logger.log(SpreadsheetApp.getActiveSpreadsheet().getUrl());
 var lRow = baseSS.getSheetByName("Sheet1").getLastRow();

  
 for (var i = 2; i <= lRow; i++) {
   var cell = baseSS.getRange("G" + i);
   var val = cell.getValue();
   if (val == "EU") {
     
     var sourceData = baseSS.getSheetByName("Sheet1").getRange("A" + i + ":R" + i).getValues();
     var to         = mainSS.getSheetByName("Database").getRange("A" + i + ":R" + i).setValues(sourceData);
     
   }
 }  
};

你好,

现在新代码可以运行了,我试图在复制粘贴中添加一个 IF AND 子句。 objective 将只复制满足以下条件的值:

第 7 列 =“欧盟” 第 11 栏 <>“CCCC”

但是我遇到语法错误。有什么建议吗?

提前感谢您的支持

function Master_Run_EU() {
  var drive = DriveApp.getFolderById("link to file");
  var file = drive.getFilesByType(MimeType.GOOGLE_SHEETS);
  var link = file.next().getUrl();
  var ss = SpreadsheetApp.openById("link to file");
  const sh=ss.getSheetByName('Database');
  sh.getRange(2,1,sh.getLastRow(),22).clearContent();
  var dbss = SpreadsheetApp.openByUrl(link);
  const dbsh=dbss.getSheetByName('Sheet1');
  var oA=[];
  var vs=dbsh.getRange(2,1,dbsh.getLastRow()-1,22).getValues();
  vs.forEach(function(r,i){
    if(r[7]=="EU" && r[11]<>"CCCC") {
      oA.push(r);
    }
  });
  sh.getRange(2,1,oA.length,oA[0].length).setValues(oA);
}

试试这个:

function Master_Run_DB() {
  var drive = DriveApp.getFolderById("1ViOyzIkGOI6G6SMrtmPv4vjL-2-2duHC");
  var file = drive.getFilesByType(MimeType.GOOGLE_SHEETS);
  var link = file.next().getUrl();
  var ss = SpreadsheetApp.openById("13CchyoqiWyvGTnYuG5TWA4cggBS-FsoDkW8XGesDkiY");
  const sh=ss.getSheetByName('Database');
  sh.getRange(2,1,sh.getLastRow(),18).clearContent();
  var dbss = SpreadsheetApp.openByUrl(link);
  const dbsh=dbss.getSheetByName('Sheet1');
  var vs=dbsh.getRange(2,1,dbsh.getLastRow()-1,18).getValues();
  vs.forEach(function(r,i){
    if(r[6]=="EU") {
      sh.getRange(i+2,1,1,18).setValues([r]);
    }
  });
}

这样做会更快:

function Master_Run_DB() {
  var drive = DriveApp.getFolderById("1ViOyzIkGOI6G6SMrtmPv4vjL-2-2duHC");
  var file = drive.getFilesByType(MimeType.GOOGLE_SHEETS);
  var link = file.next().getUrl();
  var ss = SpreadsheetApp.openById("13CchyoqiWyvGTnYuG5TWA4cggBS-FsoDkW8XGesDkiY");
  const sh=ss.getSheetByName('Database');
  sh.getRange(2,1,sh.getLastRow(),18).clearContent();
  var dbss = SpreadsheetApp.openByUrl(link);
  const dbsh=dbss.getSheetByName('Sheet1');
  var oA=[];
  var vs=dbsh.getRange(2,1,dbsh.getLastRow()-1,18).getValues();
  vs.forEach(function(r,i){
    if(r[6]=="EU") {
      oA.push(r);
    }
  });
  sh.getRange(2,1,oA.length,oA[0].length).setValues(oA);
}