Скопируйте определенную строку в новый лист Google на основе значения в ячейке в строке (JavaScript) - PullRequest
0 голосов
/ 21 апреля 2019

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

Я бы хотел, чтобы скрипт запустился и проверил столбец "H "для слова" готово ", и если оно найдено, скопируйте эту строку данных в следующую пустую строку на другом листе.

Я пробовал разные подходы, но все еще что-то не хватает.Это всегда относится к «else», поэтому я предполагаю, что проблема связана с var data = range.getValues();

function transfer1() {

    var ss = SpreadsheetApp.getActive();
    var sheet1test = ss.getSheetByName("Sheet1test");
    var dbtest = ss.getSheetByName("dbtest2");


    var dataRange = sheet1test.getDataRange();
    var range = sheet1test.getRange("A2:H" + dataRange.getLastRow());
    var data = range.getValues();

    if ( data == "done" ) { //it seems that "done" is never found in any cell??

        dbtest.getRange(dbtest.getLastRow()+1, 1, data.length, data[0].length).setValues(data);

    } else {

        do nothing

    }
}

. Я ожидаю скопировать только те строки, которые имеют значение «done».Чего мне не хватает?

1 Ответ

0 голосов
/ 21 апреля 2019

Попробуйте это:

function yourfunction() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName("Sheet1");
  var sh2=ss.getSheetByName("Sheet2");
  var rg1=sh1.getRange(1,2,sh1.getLastRow(),7);//starting at column2
  var data=rg1.getValues();
  for(var i=0;i<data.length;i++) {
    if(data[i][6]=="done") {
      sh2.appendRow(data[i]);
    }
  }
}

или это работает для:

function yourfunction() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName("Sheet1");
  var sh2=ss.getSheetByName("Sheet2");
  var rg1=sh1.getRange(1,2,sh1.getLastRow(),sh1.getLastColumn()-1);//starting at column2
  var data=rg1.getValues();
  for(var i=1;i<data.length;i++) {
    if(data[i][6]=="done") {
      sh1.getRange(i+1,2,1,sh1.getLastColumn()-1).copyTo(sh2.getRange(sh2.getLastRow()+1,1,1,sh1.getLastColumn()-1));
    }
  }
}

или даже это:

function yourfunction() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName("Sheet1");
  var sh2=ss.getSheetByName("Sheet2");
  var rg1=sh1.getRange(1,2,sh1.getLastRow(),sh1.getLastColumn()-1);//starting at column2
  var data=rg1.getValues();
  for(var i=0;i<data.length;i++) {
    if(data[i][6]!="done") {
      data.splice(i,1);
    }
  }
  sh2.getRange(sh2.getLastRow()+1,1,data.length,data[0].length).setValues(data);
}

На самом деле это довольно интересно:

function yourfunction() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName("Sheet1");
  var sh2=ss.getSheetByName("Sheet2");
  var rg1=sh1.getDataRange();
  var data=rg1.getValues();
  data.map(function(r){return r.splice(0,1);});
  for(var i=0;i<data.length;i++) {
    if(data[i][6]!="done") {
      data.splice(i,1);
    }
  }
  sh2.getRange(sh2.getLastRow()+1,1,data.length,data[0].length).setValues(data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...