繁体   English   中英

来自 Gsheet 文件的 Google 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 子句。 目标是仅复制满足以下条件的值:

第 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM