Google Sheets - Как найти первый номер строки, содержащий определенный текст, а затем очистить / удалить весь контент до конца? - PullRequest
0 голосов
/ 24 июня 2019

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

Пока у меня есть данные, импортированные, разделенные и отсортированные. Теперь я пытаюсь найти номер строки на основе значения в столбце A, а затем выбрать все строки в конце листа, чтобы удалить или очистить содержимое.

Я дошел до того, что все мои данные были разбиты на нужные мне столбцы (A: J) и отсортированы так, чтобы все соответствующие данные были вверху (это набор переменных данных), так что теперь я просто пытаюсь найти первую строку, содержащую «----------------------», так как это будет моя первая строка «мусора».

outputrange.setValues(output);
pull1.deleteRows(1, 40);
pull1.getRange(2, 1, pull1.getLastRow()-1, 
pull1.getLastColumn()).activate().sort({column:2, ascending: true});

    var removalValues = range.getValues()
    for (var j=0; j<removalValues.length; j++) {
      var rowArray = removalValues[j];
      for (var k=0; k<rowArray.length; k++) {
        var columnValue = rowArray[k];
        if (rowArray[0] === "----------------------") {

          var rowNumber = i;
          pull1.getRange(rowNumber, 1, 1, pull1.getLastColumn()).activate()
        }
      }
    }

Я попытался с помощью приведенного выше кода перебрать и найти правильную ссылку на ячейку и просто временно выделить строку, чтобы убедиться, что она работает правильно. В настоящее время эта часть моего кода обрабатывает, но в остальном ничего не делает. На самом деле мне просто нужно что-то, что просматривает мои данные в столбце А и находит соответствующие данные, а затем возвращает номер строки, чтобы я мог применить его к другим формулам.

Редактировать: я обновил свой код, используя некоторые дополнительные ресурсы, и предложил следующее. , кажется, работает правильно, но я не уверен, что это наиболее эффективное решение:

        var outputrange = pull1.getRange(startRow, 1, LR-startRow+1, 10)
        outputrange.setValues(output);
        pull1.deleteRows(1, 40);
        pull1.getRange(2, 1, pull1.getLastRow()-1, 
        pull1.getLastColumn()).activate().sort({column:2, ascending: true});

        var rangeData = pull1.getDataRange();
        var lastColumn = rangeData.getLastColumn();
        var lastRow = rangeData.getLastRow();
        var searchRange = pull1.getRange(1,1,lastRow-1,lastColumn-1);
        var removalValues = searchRange.getValues();

        for (j=0; j < lastColumn-1; j++) {
          for (k=0; k < lastRow-1; k++) {
            if(removalValues[k][j] === "----------------------") {
              pull1.getRange(k+1, 1, pull1.getLastRow(), 10).deleteCells(SpreadsheetApp.Dimension.ROWS);

            }
          }
        }

1 Ответ

0 голосов
/ 25 июня 2019

Требования:

Найдите указанный текст, затем удалите все строки ниже указанного текста.


Решение:

Используйте textFinder, чтобы найти текст, затем передайте строку результата в deleteRows().

function findAndClear() {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sh.getLastRow() + 1;
  var range = sh.getRange(1, 1, lastRow);

  //find specified text and return row number
  var row = range.createTextFinder('----------------------').findNext().getRow();

  //calculate number of rows to delete
  var delRows = lastRow - row;

  //delete rows
  sh.deleteRows(row, delRows);
}

Пояснение:

Прежде всего, извините, но я удалил скрипт, который вы использовали. Нет необходимости получать все значения в столбце, а затем перебирать каждое из них, оно слишком сложное и медленное.

Использование textFinder намного быстрее, не нужно циклически проходить по массивам, просто найти первое вхождение вашей строки в столбце A и получить номер строки.


Примечания:

Если вы хотите сохранить строку, содержащую вашу строку, используйте:

sh.deleteRows(row + 1, delRows);

Ссылки:

  1. textFinder Документация
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...