Как удалить строки, не содержащие указанный c текст в столбце A, с помощью Google Sheets App? - PullRequest
0 голосов
/ 08 января 2020

Я новичок в скриптах Google Apps, поэтому мне жаль, если мой вопрос излишний.

Я работаю над вариантом скриптов здесь:

Google Sheets: удалить строки, содержащие указанные данные

(Вот сценарий, который я редактировал - обратите внимание на пустое значение IF.)

function onOpen(){
}
function deleteFunction(){
var sheetName = "Title"; 
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName(sheetName);

var dataRange = sheet.getDataRange();
var numRows = dataRange.getNumRows();
var values = dataRange.getValues();


var rowsDeleted = 0;
for (var i = 2; i <= numRows; i++){
var rowValues = values[i-1].toString();

if (rowValues == ""){
  sheet.deleteRow(i - rowsDeleted);
  rowsDeleted++; 
}

Я хотел бы удалить строки в лист с названием «Заголовок», который не содержит «| My Text Here». Текст находится в текстовой строке, такой как «Вот текстовая строка, которая может быть случайной | Мой текст здесь». Поэтому, если «| My Text Here» не найден в ячейке, я хочу удалить всю эту строку.

Набор данных, с которым я хочу работать, будет иметь ~ 10000 строк, и я хочу, чтобы этот скрипт или бегите, когда лист открыт, или один раз в день.

Я пытался сделать эту работу, но я думаю, что я на неправильном пути и поэтому очень признателен за помощь сообщества!

При необходимости я могу приложить контрольный лист.

Заранее благодарю за помощь и руководство

Новый скрипт:

  function main() {

  var SS = SpreadsheetApp.getActive();
  var SHEET = SS.getSheetByName("Title");
  var RANGE = SHEET.getDataRange();


  var DELETE_VAL = "| TEST TEXT HERE";
  var COL_TO_SEARCH = 0; //Zero is first

  var deleteSelectedRows = removeThenSetNewVals();


  };

  function removeThenSetNewVals(){

  var SS = SpreadsheetApp.getActive();
  var SHEET = SS.getSheetByName("Title");
  var RANGE = SHEET.getDataRange();
  var rangeVals = RANGE.getValues();

  var DELETE_VAL = "| TEST TEXT HERE";
  var COL_TO_SEARCH = 0; //Zero is first

  var newRangeVals = [];

  for(var i = 0; i < rangeVals.length; i++){
  if(rangeVals[i][COL_TO_SEARCH] == DELETE_VAL){

  newRangeVals.push(rangeVals[i]);
   };
  };

  RANGE.clearContent();

  var newRange = 
  SHEET.getRange(1,1,newRangeVals.length, newRangeVals[0].length);
  newRange.setValues(newRangeVals);
   };
  }

1 Ответ

0 голосов
/ 08 января 2020

Ваш код нуждается в следующей модификации, чтобы работать так, как вы хотите

  1. Использовать indexOf () . Это метод Javascript, который позволяет проверить, содержится ли подстрока в строке. В вашем случае это позволяет вам проверить, что либо «| My Text Here» содержится в ваших ячейках в столбце A.

  2. L oop «назад» от конечной строки к начать ряд. Почему? Потому что в противном случае удаление строк испортит индексы строк оставшихся строк.

function deleteFunction(){
  //declarations
  var sheetName = "Title"; 
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName(sheetName);
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();
  for(var i=values.length-1;i>0;i--){
    var myValue=values[i][0];
          Logger.log(i);
    if( myValue.indexOf("| My Text Here")==-1){
      Logger.log(myValue);
      sheet.deleteRow(i+1);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...