Добавлять только непустые ячейки в другой лист скрипта Google - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу скопировать только непустые ячейки в столбце C & E и добавить их все в 1-й столбец листа "Обновление". Ниже приведено то, что я пытался скопировать непустые ячейки, но он не добавляется здесь: Пустой лист для справки

  function emaillFilter(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ws = ss.getSheetByName("Email");
  var updateSheet = ss.getSheetByName("Update");
  var range = ws.getRange(1,5,ws.getLastRow());

   var emptycells = SpreadsheetApp.newFilterCriteria().setHiddenValues(['']).build(); 
   var filter = range.getFilter() || range.createFilter();
       filter.setColumnFilterCriteria(5, emptycells);
  var data = ws.getRange(2,5,ws.getLastRow()).getValues();
  var array = [];
  for (var i = 0; i < data.length; i++){
    if(!ws.isRowHiddenByFilter(i+1)){  
       array.push(data[i]);
    }
  }
  updateSheet.getRange(updateSheet.getLastRow()+1, 1, array.length).setValues(array);
}

входной лист Столбец C & E

input

желаемый результат - вставить столбец C и добавить E без пробелов в столбец A другого листа

output

1 Ответ

2 голосов
/ 24 апреля 2020

Как насчет этого:

function emaillFilter(){
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName("Email");
  const ush=ss.getSheetByName("Update");
  const data=sh.getRange(2,1,sh.getLastRow(),5).getValues();
  var array=[];
  data.forEach(function(r,i){
    if(r[2] && r[4]) {
      array.push(r);
    }
  });
  ush.getRange(ush.getLastRow()+1, 1, array.length,array[0].length).setValues(array);
}

Хорошо, я думаю, что вы хотите это на основе вашего комментария:

желаемый результат - вставьте столбец C и добавьте E без пробелов в столбец A другого листа

Но я должен признать, что не вижу отраженного в вашем примере второго изображения, поэтому нам может понадобиться еще одна итерация.

function emaillFilter(){
      const ss=SpreadsheetApp.getActive();
      const sh=ss.getSheetByName("Email");
      const ush=ss.getSheetByName("Update");
      const data=sh.getRange(2,1,sh.getLastRow(),5).getValues();
      var array=[];
      data.forEach(function(r,i){
        //is columnC and columnE both truth
        if(r[2] && r[4]) {
          array.push([r[2] + ',' + r[4]]);
          //is columnC truthy and columnE falsy
        }else if(r[2] && !r[4]) {
          array.push([r[2]]);
        }
      });
      ush.getRange(ush.getLastRow()+1, 1, array.length,array[0].length).setValues(array);
    }

Хорошо, я думаю вот оно:

function emaillFilter(){
      const ss=SpreadsheetApp.getActive();
      const sh=ss.getSheetByName("Email");
      const ush=ss.getSheetByName("Update");
      const data=sh.getRange(2,1,sh.getLastRow(),5).getValues();
      var array1=[];
      var array2=[];
      data.forEach(function(r,i){
        if(r[2]) {
          array1.push([r[2]]);
        }
        if(r[4]) {
          array2.push([r[4]]);
        }
      });
      var array=array1.concat(array2);
      ush.getRange(ush.getLastRow()+1, 1, array.length,array[0].length).setValues(array);
    }

Спасибо за изображения. Они действительно помогли.

правдиво

ложь

...