Удалите строку в таблицах Google, если значение ячейки в указанной строке равно 0 или пустое - программирование
Подтвердить что ты не робот

Удалите строку в таблицах Google, если значение ячейки в указанной строке равно 0 или пустое

Я хотел бы иметь возможность удалить целую строку в таблицах Google, если значение, введенное для столбца "C" в этой строке, равно 0 или пусто. Есть ли простой script, который я мог бы написать, чтобы выполнить это? Спасибо!

4b9b3361

Ответ 1

function onEdit(e) {
  //Logger.log(JSON.stringify(e)); 
  //{"source":{},"range":{"rowStart":1,"rowEnd":1,"columnEnd":1,"columnStart":1},"value":"1","user":{"email":"","nickname":""},"authMode":{}}
  try {
    var ss = e.source; // Just pull the spreadsheet object from the one already being passed to onEdit
    var s = ss.getActiveSheet();

    // Conditions are by sheet and a single cell in a certain column
    if (s.getName() == 'Sheet1' &&  // change to your own 
        e.range.columnStart == 3 && e.range.columnEnd == 3 &&  // only look at edits happening in col C which is 3
        e.range.rowStart == e.range.rowEnd ) {  // only look at single row edits which will equal a single cell
      checkCellValue(e); 
    }
  } catch (error) { Logger.log(error); }
};

function checkCellValue(e) {
  if ( !e.value || e.value == 0) {  // Delete if value is zero or empty
    e.source.getActiveSheet().deleteRow(e.range.rowStart);
  }
}

Это только просмотр значения из одной редактируемой ячейки, а не значений всего листа.

Ответ 2

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

/**
 * Deletes rows in the active spreadsheet that contain 0 or
 * a blank valuein column "C". 
 * For more information on using the Spreadsheet API, see
 * https://developers.google.com/apps-script/service_spreadsheet
 */
function readRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var rowsDeleted = 0;
  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    if (row[2] == 0 || row[2] == '') {
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};

/**
 * Adds a custom menu to the active spreadsheet, containing a single menu item
 * for invoking the readRows() function specified above.
 * The onOpen() function, when defined, is automatically invoked whenever the
 * spreadsheet is opened.
 * For more information on using the Spreadsheet API, see
 * https://developers.google.com/apps-script/service_spreadsheet
 */
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Remove rows where column C is 0 or blank",
    functionName : "readRows"
  }];
  sheet.addMenu("Script Center Menu", entries);
};

Проверить таблицу перед:

enter image description here

Выполнение script из меню:

enter image description here

После запуска script:

enter image description here

Ответ 3

Я могу предложить простое решение без использования script!!

Предположим, вы хотите удалить строки с пустым текстом в столбце C. Сортировка данных (меню данных → Сортировка листа по столбцу C, A- > Z) в столбце страницы w.r.t C, поэтому все ваши пустые строки текста будут доступны вместе.

Просто выберите эти строки и щелкните правой кнопкой мыши → удалить строки. Затем вы можете повторно сортировать свои данные в соответствии с нужным столбцом. Готово.

Ответ 4

У меня возникло несколько проблем со сценариями, поэтому моим обходным путем было использование инструмента "Фильтр".

  • Выбрать все данные электронных таблиц
  • Нажмите значок инструмента фильтра (выглядит как бокал)
  • Нажмите новый значок фильтра в первой ячейке столбца, который вы хотите найти.
  • Выберите "Filter By Condition" > Установить условия (я использовал "Text Contains" > "word" )

Это оставит строки, содержащие слово, которое вы ищете, и их можно удалить, выбирая их, удерживая клавишу shift > щелкните правой кнопкой мыши > удалить строки.

Ответ 5

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

  function UpdateLog() {

  var returnSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('RetLog');
  var rowCount = returnSheet.getLastRow();

  for (i = rowCount; i > 0; i--) {
    var rrCell = 'G' + i;
    var cell = returnSheet.getRange(rrCell).getValue();
    if (cell > 0 ){
      logSheet.
      returnSheet.deleteRow(i);
    }
  }
}

Ответ 6

довольно простой запрос. Попробуйте следующее:

 function try_It(){
 deleteRow(2); //// choose col = 2 for column C
 }

 function deleteRow(col){ // col is the index of the column to check for 0 or empty
 var sh = SpreadsheetApp.getActiveSheet();
 var data = sh.getDataRange().getValues();
 var targetData = new Array();
 for(n=0;n<data.length;++n){
 if(data[n][col]!='' && data[n][col]!=0){ targetData.push(data[n])};
 }
 Logger.log(targetData);
 sh.getDataRange().clear();
 sh.getRange(1,1,targetData.length,targetData[0].length).setValues(targetData);
 }

РЕДАКТИРОВАТЬ: повторное чтение вопроса. Я не уверен, что вопрос требует "жить" на функции редактирования или функции (например, выше) для применения после ввода данных... Мне это не очень понятно... так что не стесняйтесь быть более точными, если это необходимо;)

Ответ 7

внимательно прочитав ваш вопрос, я придумал это решение:

function onOpen() {
  // get active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // create menu
  var menu = [{name: "Evaluate Column C", functionName: "deleteRow"}];

  // add to menu
  ss.addMenu("Check", menu);
}

function deleteRow() {
  // get active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // get active/selected row
  var activeRow = ss.getActiveRange().getRowIndex();

  // get content column C
  var columnC = ss.getRange("C"+activeRow).getValue();

  // evaluate whether content is blank or 0 (null)
  if (columnC == '' || columnC == 0) {
    ss.deleteRow(parseInt(activeRow));
  }
}

Этот script создаст меню при загрузке файла и позволит вам удалить строку на основе тех критериев, которые установлены в столбце C, или не.

Ответ 8

Существует более простой способ:

  • Используйте фильтрацию, чтобы отображать только строки, которые вы хотите удалить. Например, мой столбец, на основе которого я хочу удалить строки, имел на них категории, A, B, C. Через интерфейс фильтрации я выбрал только A и B, которые я хотел удалить.
  • Выберите все строки и удалите их. Выполнение этого, в моем примере, эффективно выбрало все строки A и B и удалило их; теперь моя таблица не показывает никаких строк.
  • Выключите фильтр. Это отображает мои строки C. Готово!

Ответ 9

Этот простой код выполнил эту работу для меня!

    function myFunction() {

      var ss = SpreadsheetApp.getActiveSpreadsheet();  // get active spreadsheet

      var activeRow = ss.getActiveRange().getRowIndex();  // get active/selected row

var start=1;
var end=650;
var match='';
var match2=0;   //Edit this according to your choice.

     for (var i = start; i <= end; i++) {
      var columnC = ss.getRange("C"+i).getValue();
      if (columnC ==match  || columnC ==match2){ ss.deleteRow(i); }
     }
    }