it-swarm.com.ru

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

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

19
Zack
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);
  }
}

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

21
Bryan P

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

/**
 * 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

Запуск скрипта из меню:

enter image description here

После запуска скрипта:

enter image description here

16
Mike Grace

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

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

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

12
roneo

У меня было несколько проблем со скриптами, поэтому я решил использовать инструмент «Фильтр».

  1. Выбрать все данные электронной таблицы
  2. Нажмите значок фильтра (выглядит как бокал)
  3. Нажмите на значок нового фильтра в первой ячейке столбца, который вы хотите найти.
  4. Выберите «Фильтровать по условию»> Установить условия (я использовал «Текст содержит»> «Слово»)

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

5
Adam

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

  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);
    }
  }
}
3
MikeD

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

 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);
 }

EDIT: повторное чтение вопроса. Я не уверен, что вопрос заключается в том, чтобы задать вопрос «вживую» для функции «Правка» или для функции (как выше), которую нужно применить после ввода данных. Мне не очень понятно ... так что не стесняйтесь быть более точным, если это необходимо;)

1
Serge insas

Этот простой код сделал работу за меня!

    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); }
     }
    }
0
Udayraj Deshmukh

Есть более простой способ:

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

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

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));
  }
}

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

0
Jacob Jan Tuinstra