Reputation: 45
I have a dataset and here is the link for that:
https://docs.google.com/spreadsheets/d/1QgR7WC2bj2_AW7yTDnjEXDrYKGo1GR_w_ea-8PtRwm4/edit?usp=sharing
So what I want is,if any cell in column A has a date (not empty), I want to fetch the entire row.
I even got one script in stack overflow which is:
function copynotempty(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = SpreadsheetApp.setActiveSheet(ss.getSheets()[0])
var col = 0 ; // choose the column you want to check: 0 = col A, 1= col B ...
var range = sh.getDataRange();
var values=range.getValues();// data is a 2D array, index0 = col A
var formulas=range.getFormulas();// data is a 2D array, index0 = col A
var target=new Array();// this is a new array to collect data
for(n=0;n<range.getHeight();++n){
if (values[n][col]!=''){ ;
for (cc=0;cc<range.getWidth();++cc){
if (values[n][cc]!=''){target[n][cc]=values[n][cc]}
// if the cell has a formula copy it or else copy the value, do that for the whole row
// (this also defines and apply the 'priority' you mentioned in your question, I wasn't sure if it should apply to the whole row or only on column B)
}
}
}
if(target.length>0){// if there is something to copy
var sh2=SpreadsheetApp.setActiveSheet(ss.getSheets()[1]); //second sheet of your spreadsheet
sh2.getRange(1,1,target.length,target[0].length).setValues();// paste the selected values in the 2cond sheet
}
}
but if i use this to the dataset that I have shared I am getting this error "TypeError: Cannot set property "0.0" of undefined to "invited". (line 12, file "Code")".
Thanks in advance.
Upvotes: 1
Views: 3087
Reputation: 201683
How about following script? This script retrieves only rows that column A has strings.
Although you say that you want to retrieve rows by a condition of column B, your script watches column A as the condition. So if you use this sample script, please change "col". Now "col" is column A.
Script:
function copynotempty() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getSheets()[0].getDataRange();
range.setNumberFormat('@');
var values = range.getValues();
col = 0;
var target = values.filter(function(e, i){return (isNaN(e[col]) && i > 0)});
ss.getSheets()[1].getRange(1,1,target.length,target[0].length).setValues(target);
}
Result: This is imported to sheet2.
[[22/1/16, 2/2/16, 3/2/16, 3/2/16, 6/2/16],
[13/1/16, 13/1/16, 13/1/16, 13/1/16, 20/1/16],
[2/2/16, 2/2/16, 2/2/16, 2/2/16, 9/2/16],
[1/2/16, 1/2/16, 8/3/16, 14/3/16, 2/5/16],
[11/1/16, 11/1/16, 11/1/16, , ],
[12/2/16, 12/2/16, 12/2/16, 12/2/16, 20/2/16],
[28/1/16, 28/1/16, 28/1/16, , ],
[6/1/16, 6/1/16, 6/1/16, 6/1/16, 15/1/16],
[25/1/16, 25/1/16, 25/1/16, 25/1/16, 13/2/16],
[30/1/16, 3/2/16, 10/2/16, 10/2/16, 14/2/16],
[27/1/16, 27/1/16, 27/1/16, 27/1/16, 8/2/16],
[15/1/16, 23/1/16, 23/1/16, 23/1/16, 29/1/16],
[12/1/16, 12/1/16, 12/1/16, 12/1/16, 16/1/16],
[2/2/16, 3/2/16, 3/2/16, 3/2/16, 6/2/16],
[18/12/15, 5/1/16, 5/1/16, 5/1/16, 12/1/16]]
Upvotes: 1