Проблема с копированием-вставкой кода скрипта Google Apps из файла Gsheet - PullRequest
0 голосов
/ 16 апреля 2020

Я создал код для копирования и вставки значений из самого последнего загруженного файла Gsheet в другой. Код должен копировать и вставлять только те значения, которые удовлетворяют условию ячейки.

Проблема в том, что этот код занимает много времени и не завершает sh, чтобы скопировать все значения перед выполнением ошибка времени.

Файл содержит около 300 000 ячеек, а окончательные суммы, которые нужно вставить во 2-й файл, имеют около 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 = "EU" Столбец 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);
}

1 Ответ

1 голос
/ 16 апреля 2020

Попробуйте:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...