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

问题描述 投票:0回答:1

我创建了代码,将值从最新上传的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("1ViOyzIkGOI6G6SMrtmPv4vjL-2-2duHC");
    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("13CchyoqiWyvGTnYuG5TWA4cggBS-FsoDkW8XGesDkiY");
 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("1GiWUpQGch-SfNa6Yr4khHwfhfANEqyEA");
  var file = drive.getFilesByType(MimeType.GOOGLE_SHEETS);
  var link = file.next().getUrl();
  var ss = SpreadsheetApp.openById("1zCYoaK4AA7N-gRH0Kf4NW5s5ffCzEY1mzlX3O0uW-gg");
  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);
}
database google-apps-script google-sheets bigdata copy-paste
1个回答
1
投票

尝试一下:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.