Все функции выполняются одновременно - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь скопировать данные с одного листа, вставить их на другой, а затем удалить строку, к которой прикреплен «флаг» (столбец D). Когда я выполняю этот код, он просто удаляет флаг, а не всю строку. Что здесь происходит? Кажется, что функции выполняются в неправильном порядке.

Пробовал с использованием Utilities.sleep(), а также

  • разделяя оба на разные функции
  • используя цикл for для записи всех столбцов, которые я хочу удалить
  • применение flush к функциям перед выполнением следующего
    //copies the code
    function myFunction() {
        var url = 'https://docs.google.com/spreadsheets/d/1ie2Fyj2piVV8XC0XUGX-fTAHcQ0UUUdec4Mtr1QdXtQ/edit#gid=293227072'
        var ss = SpreadsheetApp.openByUrl(url)
        var sheet = ss.getSheetByName('Bad Emails Input')
        var range = sheet.getRange("K:N")
        var values = range.getValues()
        var target = ss.getSheetByName("worklist")
        target.getRange("A:D").setValues(values)
        SpreadsheetApp.flush()
        Utilities.sleep(5 * 1000)
    }


    //deletes the rows with flags in them
    function myFunction2() {
        var url = 'https://docs.google.com/spreadsheets/d/1ie2Fyj2piVV8XC0XUGX-fTAHcQ0UUUdec4Mtr1QdXtQ/edit#gid=293227072'
        var ss = SpreadsheetApp.openByUrl(url)
        var sheet = ss.getSheetByName('Bad Emails Input')
        var range = sheet.getRange("K:N")
        var values = range.getValues()
        var target = ss.getSheetByName("worklist")
        Utilities.sleep(6 * 1000)
        var oldnews = target.getRange("D:D")
        for (i = oldnews.length; i > 0; i--){
            if (oldnews[i] !== undefined) {
                target.getRange(i,1)
                target.getRange(i,2)
                target.getRange(i,3)
                target.getRange(i,4)
            } 
        }
        SpreadsheetApp.flush()
    }

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Попробуйте следующий код:

function myFunction() {
    var url = 'https://docs.google.com/spreadsheets/d/1ie2Fyj2piVV8XC0XUGX-fTAHcQ0UUUdec4Mtr1QdXtQ/edit#gid=293227072'
    var ss = SpreadsheetApp.openByUrl(url);
    var sheet = ss.getSheetByName('Bad Emails Input');
    var range = sheet.getRange("K:N");
    var values = range.getValues();
    var target = ss.getSheetByName("worklist");
    target.getRange("A:D").setValues(values);
    SpreadsheetApp.flush();
    //If you have a header row change the below to A2:D and count to 2
    var data=ss.getSheetByName("worklist").getRange("A:D").getValues(),count=1;
    for (i in data) {
    var rowdata=data[i];
    if (!rowdata[0] || rowdata[0]==''){break;}
    if (rowdata[3] == 'flag') {//change the flag to however it is in column D
    ss.getSheetByName("worklist").deleteRow(count);
    count++;
    }
    }
}
1 голос
/ 02 июля 2019

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

function myFunction() {
  var ss = SpreadsheetApp.openById("id");
  var sheet = ss.getSheetByName('Bad Emails Input')
  var range = sheet.getRange(1,11,sheet.getLastRow(),4);
  var values = range.getValues()
  var target = ss.getSheetByName("worklist")
  target.getRange(1,1,values.length,values[0].length).setValues(values);
  SpreadsheetApp.flush();
  var d=0;
  for(var i=0;i<values.length;i++) {
    if(values[i][3]) {
      target.deleteRow(i+1-d++);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...