-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEventsOpen.js
127 lines (86 loc) · 3.66 KB
/
EventsOpen.js
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
function selectionDuplicates() {
// найти строки различающиеся ростами и если разные цены - сообщить пользователю
var a2 = SpreadsheetApp.getActiveSpreadsheet().getSelection().getActiveRange().getValues();
// в одномерный массив
a2 = a2.flat(Infinity);
//console.log(a2);
var duplicates = [];
/* отсортировать массив, а затем проверить, совпадает ли «следующий элемент» с текущим элементом, и поместить его в массив: */
var tempArray = [...a2].sort();
//console.log(tempArray);
for (let i = 0; i < tempArray.length; i++) {
if (tempArray[i + 1] === tempArray[i]) {
duplicates.push(tempArray[i]);
}
}
// массив оставляю уникальные
duplicates = duplicates.filter(onlyUnique);
Browser.msgBox(duplicates);
//console.log(duplicates);
}
function onlyUnique(value, index, self) {
//проверяет, является ли данное значение первым встречающимся. Если нет, то это дубликат и не будет скопирован.
return self.indexOf(value) === index;
}
function onOpen() {
var ui = SpreadsheetApp.getUi(); // Or DocumentApp or FormApp.
ui.createMenu('Прайсы')
.addItem('Обрамить', 'formulaCodeFind')
.addItem('Дубликаты', 'selectionDuplicates')
// .addItem('Нули формат', 'selectionNullFormatted')
.addSeparator()
// .addSubMenu(ui.createMenu('Sub-menu')
// .addItem('Тест', 'sheetActive'))
.addToUi();
}
function formulaCodeFind() {
// ячейки выделенные обрамить слева и справа
const column = columnBySheet();
if (column === undefined) { return; }
var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveRange();
var rowsCount = range.getNumRows();
var colsCount = range.getNumColumns();
var cell;
var cellValue;
var formula;
for (var row = 1; row <= rowsCount; row++) {
for (var col = 1; col <= colsCount; col++) {
cell = range.getCell(row, col);
formula = cell.getFormula()
if (formula != "") {
return;
}
cellValue = cell.getValue();
if (cellValue == '') {
return;
}
if (!IsNumeric(cellValue)) {
// нечисла добавить кавычки
cellValue = '"' + cellValue + '"';
}
cellValue = "=IFError(Index('сводная таблица'!" + column + ";MATCH("
+ cellValue + ";'сводная таблица'!$A:$A;0);1);\"код НЕ найден\")";
cell.setValue(cellValue);
}
}
}
function menuItem2() {
SpreadsheetApp.getUi().alert('You clicked the second menu item!');
// DocumentApp.getUi().alert('You clicked the second menu item!'); - for DocumentApp
}
function IsNumeric(stringIN) {
return isFinite(parseFloat(stringIN));
}
function columnBySheet() {
// столбец в зависимости от имени листа
const sheetName = SpreadsheetApp.getActiveSheet().getName();
if (sheetName == "Прайс без НДС") { return "$J:$J"; }
if (sheetName == "Прайс с НДС") { return "$L:$L"; }
if (sheetName == "Прайс партнеры без НДС") { return "$M:$M"; }
if (sheetName == "Прайс партнеры c НДС") { return "$N:$N"; }
if (sheetName == "Прайс СНГ") { return "$O:$O"; }
if (sheetName == "Прайс СНГ партнеры") { return "$P:$P"; }
}
function sheetActive() {
Browser.msgBox(SpreadsheetApp.getActiveSheet().getName())
}