/
Utils_.gs
78 lines (62 loc) · 1.9 KB
/
Utils_.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// 34567890123456789012345678901234567890123456789012345678901234567890123456789
// JSHint - TODO
/* jshint asi: true */
/* jshint esversion: 6 */
(function(){"use strict"})()
// Utils_.gs
// =========
//
// Object template
var Utils_ = (function(ns) {
/**
* Create an object where the keys are the header names and the value the header (zero) index
*
* @param {Sheet} sheet
* @param {number} headerRowNumber [OPTIONAL, DEFAULT = 1]
* @return {object}
*/
ns.getHeaderIndexes = function(sheet, headerRowNumber) {
if (headerRowNumber === undefined) headerRowNumber = 1
let headerColumnIndexes = {}
sheet
.getRange(headerRowNumber, 1, 1, sheet.getLastColumn())
.getValues()[0]
.forEach((headerName, index) => {headerColumnIndexes[headerName.trim()] = index})
return headerColumnIndexes
}
/**
* Search a 2D array
*
* @param Array valueArray - 2D array to seach
* @param object valueToFind
* @param columnIndex - column to search [DEFAULT: 0]
* @return rowIndex
*/
ns.findIn2DArray = function(valueArray, valueToFind, columnIndex) {
const rowIndex = valueArray.findIndex(row => row[columnIndex] === valueToFind)
if (rowIndex === -1) throw new Error(`Could not find ${valueToFind}`)
return rowIndex
}
/**
* Get the active spreadsheet, failing that the test one.
*
* @return {Spreadsheet} spreadsheet
*/
ns.getSpreadsheet = function() {
var spreadsheet = SpreadsheetApp.getActive()
if (spreadsheet === null) {
if (!PRODUCTION_VERSION_) {
spreadsheet = SpreadsheetApp.openById(TEST_SHEET_ID_)
} else {
throw new Error('No active spreadsheet')
}
}
return spreadsheet
}
ns.alert = function(message) {
var spreadsheet = SpreadsheetApp.getActive()
if (spreadsheet === null) return
SpreadsheetApp.getUi().alert(message)
}
return ns
})({})