その行の列「C」に入力された値が0または空白の場合、Googleスプレッドシートの行全体を削除できるようにしたいと思います。これを達成するために書くことができる簡単なスクリプトはありますか?ありがとう!
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);
}
}
これは、シート全体の値ではなく、単一セル編集の値のみを見るようになりました。
Googleスプレッドシートの1つで同じことを行うために、このスクリプトを書きました。すべてのデータがスプレッドシートに含まれた後にスクリプトを実行できるようにしたかったので、スクリプトを実行するためのメニューオプションをスクリプトに追加しました。
/**
* 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);
};
スクリプトを使用せずに簡単な解決策を提案できます!!
列Cに空のテキストがある行を削除するとします。列Cのシートでデータを並べ替えます([データメニュー]-> [列Cでシートを並べ替え]、[A]-> [Z])。 。
それらの行をすべて選択し、右クリック->行を削除するだけです。その後、必要な列に従ってデータを並べ替えることができます。できた.
スクリプトにいくつか問題があったので、回避策は「フィルター」ツールを使用することでした。
これにより、検索対象のWordを含む行が残り、Shiftキーを押しながらそれらを一括選択することで削除できます。右クリック>行を削除します。
これは私がなんとか仕事をすることができたものです。行が削除されたときに次の行がスキップされないように、シートを逆方向にループしたことがわかります。これが誰かの助けになることを願っています。
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);
}
}
}
非常に簡単なリクエスト。これを試して :
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 [〜#〜]:質問を読み直す編集で質問が「ライブ」を求めているかどうかわかりませんデータが入力された後に適用する関数または関数(上記のように)...それは私にはあまり明確ではありません...ので、必要に応じてより正確に自由に感じてください;)
この単純なコードは私のために仕事をしました!
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); }
}
}
もっと簡単な方法があります:
あなたの質問を注意深く読んで、私はこの解決策を思いつきました:
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で設定された基準に基づいて行を削除できるようにします。またはnotです。