在Google表格中,我想根据日期选择某些行。 我知道getRange()函数,但不知道如何向该函数添加条件。 例如,如果我在电子表格中有 10行,其中:
我试图找到一种编写Google表格脚本的方法,以拉出所有具有date列在12/31/2018和01/09/2019之间的行,我应该在这个特定的行中获得五行情况。
我已经编写了以下代码来创建新工作表,但不知道如何选择带有条件的范围:
var spreadsheet = SpreadsheetApp.getActive();
var sheets = spreadsheet.getSheets();
var mainSheet = sheets[0];
var fileName = mainSheet.getRange("B2:C2").getDisplayValue();
var date = Utilities.formatDate(new Date(), "GMT+5", "yyyy-MM-dd")
var newFileName = "WS_"+date;
var dataSheetFileList = DriveApp.getFilesByName(fileName);
var dataSheetFile = dataSheetFileList.next();
dataSheetFile.makeCopy(newFileName)
var newFileUrl = DriveApp.getFilesByName(newFileName).next().getUrl();
var newFile = DriveApp.getFilesByName(newFileName);
newFile.next().setSharing(DriveApp.Access.DOMAIN_WITH_LINK, DriveApp.Permission.EDIT);
var dataSheetFileList = DriveApp.getFilesByName(newFileName);
if(dataSheetFileList.hasNext()){
var dataSheetFile = dataSheetFileList.next();
var dataSheet = SpreadsheetApp.open(dataSheetFile);
var dataSheetList = dataSheet.getSheets();
var dataSheetCcb = dataSheetList[0];
**<Code to select the rows based on date>**
}
答案 0 :(得分:2)
有我的实现方式
/* exported onOpen, userActionSelectByCondition, rowSelector_, userActionSelectByDateCondition */
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Advansed selector')
.addItem('Select between 40 and 1000', 'userActionSelectByCondition')
.addItem(
'Select between 01/02/2019 and 01/04/2019',
'userActionSelectByDateCondition'
)
.addToUi();
}
/**
* Select rows of the active sheet by condition
*/
function userActionSelectByCondition() {
var /** @type {condition} */ condition = function(row) {
return row[0] > 40 && row[0] < 1000;
};
var sheet = SpreadsheetApp.getActiveSheet();
rowSelector_(sheet, condition);
}
/**
* Select rows of the active sheet by condition
*/
function userActionSelectByDateCondition() {
var date1 = new Date(2019, 0, 2, 0, 0, 0, 0).getTime();
var date2 = new Date(2019, 0, 4, 0, 0, 0, 0).getTime();
var /** @type {condition} */ condition = function(row) {
return (
row[2] &&
row[2].getTime &&
row[2].getTime() > date1 &&
row[2].getTime() < date2
);
};
var sheet = SpreadsheetApp.getActiveSheet();
rowSelector_(sheet, condition);
}
/**
*
* @param {GoogleAppsScript.Spreadsheet.Sheet} sheet
* @param {condition} callback
* @returns {GoogleAppsScript.Spreadsheet.RangeList}
*/
function rowSelector_(sheet, callback) {
return sheet
.getRangeList(
sheet
.getDataRange()
.getValues()
.reduce(function(p, c, i) {
if (callback(c)) p.push(i + 1 + ':' + (i + 1));
return p;
}, [])
)
.activate();
}
/**
* Callback for condition
*
* @callback condition
* @param {Array<object>} row A row of the sheet
* @returns {boolean}
*/
示例https://docs.google.com/spreadsheets/d/1i7h3CpWa6SEFK8uegNIcKJcpeg1n1-FdyjUwGWicm_M/edit?usp=sharing和视频https://www.facebook.com/oshliaer/videos/2196890940397483/
如果您确实需要选择行,则可以使用getRangeList().activate()
。
否则,如果您需要按条件获取数据,则可以使用getDataRange().getValues().reduce()
处理值。