Копировать данные из таблицы в другую на основе отфильтрованного диапазона - PullRequest
0 голосов
/ 03 марта 2020

У меня есть этот скрипт, который копирует весь контент из исходной электронной таблицы в целевую электронную таблицу. Но я хотел бы скопировать только указанный c столбец (Col B), зависимый от другого столбца (Col C) с содержанием «Италия».

function CopyDataToNewFile() {
  var sss = SpreadsheetApp.openById('1jtZli...'); // sss = source spreadsheet
  var ss = sss.getSheetByName('Sorgente'); // ss = source sheet
  //Get full range of data
  var SRange = ss.getDataRange();
  //get A1 notation identifying the range
  var A1Range = SRange.getA1Notation();
  //get the data values in range
  var SData = SRange.getValues();

  var tss = SpreadsheetApp.openById('185I...'); // tss = target spreadsheet
  var ts = tss.getSheetByName('Destinazione'); // ts = target sheet
  //set the target range to the values of the source data
  ts.getRange(A1Range).setValues(SData);

}

Я пришел к такому выводу. Есть метод на листе назначения (где есть проверка данных из исходного листа), где проверка данных отображает только значение, еще не вставленное в лист назначения?

1 Ответ

1 голос
/ 03 марта 2020

Попробуйте:

function CopyDataToNewFile() {
  var sss = SpreadsheetApp.openById('1jtZli...'); 
  var ss = sss.getSheetByName('Sorgente');
  var SRange = ss.getDataRange();
  var A1Range = SRange.getA1Notation();
  var SData = SRange.getValues();
  var B=[];
  SData.forEach(function(r){
    if(r[2]=='Italy') {
      B.push([r[1]]);
    }
  });
  var tss = SpreadsheetApp.openById('185I...');
  var ts = tss.getSheetByName('Destinazione');
  ts.getRange(1,1,B.length,1).setValues(B);
}

Вот несколько способов, которыми вы можете играть. Я думаю, что первый будет намного быстрее.

Первый получает все данные одновременно и записывает выходные данные одновременно.

function Copy() {
  var ss=SpreadsheetApp.openById('source spreadsheet id')
  var ssh=ss.getSheetByName('sorg');
  var dss=SpreadsheetApp.openById('destination spreadsheet id')
  var dsh=dss.getSheetByName('dest')
  var srg=ssh.getRange(1,1,ssh.getLastRow(),ssh.getLastColumn());
  var svA=srg.getValues();
  var oA=[];
  svA.forEach(function (r,i) {
    if (r[2]=='Italy') {
      oA.push([r[1]]);
    }
  });
  dsh.getRange(dsh.getLastRow()+1,1,oA.length,1).setValues(oA);
}

Второй получает столбец B и столбец C и сравнивает каждую строку столбца C со строкой «Италия», если столбец C равен «Италия», а затем добавляет эту же строку столбца В, чтобы выполнить намного больше операций записи и еще одного чтения.

function Copy() {
  var ss=SpreadsheetApp.openById('source spreadsheet id');
  var ssh=ss.getSheetByName('sorg');
  var dss=SpreadsheetApp.openById('destination spreadsheet id');
  var dsh=dss.getSheetByName('dest');
  var srgB=ssh.getRange(1,2,ssh.getLastRow());//col B
  var srgC=ssh.getRange(1,3,ssh.getLastRow());//col C
  var BvA=srgB.getValues();
  var CvA=srgC.getValues();
  var oA=[];
  BvA.forEach(function (r,i) {
    if(CvA[i][0]=='Italy') {
      dss.appendRow([BvA[i][0]]);
    }
  });  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...