回答編集履歴
4
a
test
CHANGED
@@ -124,11 +124,9 @@
|
|
124
124
|
|
125
125
|
const data = book.getActiveSheet().getDataRange().getValues();
|
126
126
|
|
127
|
-
const r
|
127
|
+
const format = squarize(result);
|
128
128
|
|
129
|
-
book.getSheetByName("1").getRange(1,1,format.length,format[0].length).setValues(format);
|
129
|
+
book.getSheetByName("1").getRange(1, 1, format.length, format[0].length).setValues(format);
|
130
|
-
|
131
|
-
//sheet_output.getRange(1,1,4053,45).setValues(result);
|
132
130
|
|
133
131
|
}
|
134
132
|
|
3
あ
test
CHANGED
@@ -8,7 +8,9 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
ところが実行したところ、下にサンプル出力を出しましたが、欲しいかたちとして私には全く理解不能でした。
|
11
|
+
ところが実行したところ、~~下にサンプル出力を出しましたが~~、欲しいかたちとして私には全く理解不能でした。
|
12
|
+
|
13
|
+
(出力が多すぎて(右に長くなりすぎて)10000字を越え、別回答にすら貼ることができませんでした。サンプルデータとコードをかいているので、実行と再現が可能なはずなので割愛しました)
|
12
14
|
|
13
15
|
|
14
16
|
|
2
a
test
CHANGED
@@ -142,7 +142,7 @@
|
|
142
142
|
|
143
143
|
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q |
|
144
144
|
|
145
|
-
|
|
145
|
+
|--|------------|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|
146
146
|
|
147
147
|
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 1 | 3 | 4 | 5 | |
|
148
148
|
|
1
あーたいへん
test
CHANGED
@@ -1,27 +1,185 @@
|
|
1
|
-
|
1
|
+
質問者様提示のコード(t()として再現)をエラーなく実行するために squarize が必要なので、実装しました。
|
2
|
+
|
3
|
+
(sample data やその他のコードを補わなければ回答不能です。未知のものをこちらが妄想するほど望ましい回答からは離れますし、その的外れな空想のために不必要な誰も嬉しくない時間がかかることをどうかご理解いただきたいです)
|
2
4
|
|
3
5
|
|
4
6
|
|
5
|
-
|
7
|
+
→ なので、squarize だけ持っていけば実行可能だと思います。多分。
|
6
8
|
|
7
9
|
|
8
10
|
|
9
|
-
とありますが、実際は`[[a,b,c,],[c,d,f,g],[h,i,,]]`のように,が連なっていませんか?(これはjsとしてはillegalな表記ですがログ出力するとこうなる例として示しています。)
|
10
|
-
|
11
|
-
たと
|
11
|
+
ところが実行したところ、下にサンプル出力を出しましたが、欲しいかたちとして私には全く理解不能でした。
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
|
15
|
+
得ようとしている結果はデータ構造としておすすめできない形式ですが、すくなくとも一定程度の整合性をもたせるには、q293827() 程度の一貫的な結果が必要なのではないでしょうか。
|
16
|
+
|
17
|
+
いちおう sample では末尾列に a があるかないかで不揃いにしています。もし元データがもっと不揃いなのだとしたら、q293827() だと空白が間にはさまってしまって不適切だと思いますが、右に展開した列が各列で不揃いであるほうがより良くないと考えて再構成しました。
|
16
18
|
|
17
19
|
|
18
20
|
|
21
|
+
|
22
|
+
|
19
|
-
|
23
|
+
本来やりたかったことに立ち返って、元データから見直すことをご提案いたします。ご検討いただければと思います。
|
20
24
|
|
21
25
|
|
22
26
|
|
27
|
+
```javascript
|
28
|
+
|
29
|
+
const notOk = (data) => {
|
30
|
+
|
31
|
+
const isNotOk = {"col":15,"val":"ok"};
|
32
|
+
|
33
|
+
return data.filter(e=>e[isNotOk.col] !== isNotOk.val);
|
34
|
+
|
35
|
+
};
|
36
|
+
|
37
|
+
const buildDicForSingle = (data) => {
|
38
|
+
|
39
|
+
const isSingle = {"col":1,"val":"SinglePhrase"};
|
40
|
+
|
41
|
+
const wordCol = 12;
|
42
|
+
|
43
|
+
return new Map(data.reduce((a,c,i)=>c[isSingle.col] === isSingle.val ? a.concat([[c[wordCol],i]]):a,[]));
|
44
|
+
|
45
|
+
}
|
46
|
+
|
47
|
+
const merge = (data,map) => {
|
48
|
+
|
49
|
+
const wordCol = 12;
|
50
|
+
|
51
|
+
return data.reduce((a,c,i)=>{ Logger.log(a);return map.has(c[wordCol]) ? ((map.get(c[wordCol]) !== i) ? a : a.concat([data.filter(e=>e[wordCol] === c[wordCol]).flat()])) : a.concat([c])},[]);
|
52
|
+
|
53
|
+
}
|
54
|
+
|
55
|
+
const squarize = (jag) => {
|
56
|
+
|
57
|
+
const maxLen = Math.max(...jag.map(e=>e.length));
|
58
|
+
|
23
|
-
|
59
|
+
const empties = Array(maxLen).fill("");
|
60
|
+
|
61
|
+
return jag.map(e=> e.concat(empties).slice(0,maxLen));
|
62
|
+
|
63
|
+
}
|
64
|
+
|
65
|
+
const q293827 = () => {
|
66
|
+
|
67
|
+
const book = SpreadsheetApp.getActive();
|
68
|
+
|
69
|
+
const data = book.getActiveSheet().getDataRange().getValues();
|
70
|
+
|
71
|
+
const notok = notOk(data);
|
72
|
+
|
73
|
+
const dic = buildDicForSingle(notok);
|
74
|
+
|
75
|
+
const res = merge(notok,dic);
|
76
|
+
|
77
|
+
const format = squarize(res);
|
78
|
+
|
79
|
+
if(format.length < 1) return;
|
80
|
+
|
81
|
+
book.getSheetByName("1").getRange(1,1,format.length,format[0].length).setValues(format);
|
82
|
+
|
83
|
+
}
|
24
84
|
|
25
85
|
|
26
86
|
|
87
|
+
function compare(data) {
|
88
|
+
|
89
|
+
let newarray = []
|
90
|
+
|
91
|
+
for(var i=1; i < 5000 ; i++){
|
92
|
+
|
93
|
+
if(data[i][15] !== "ok")
|
94
|
+
|
95
|
+
newarray.push(data[i])
|
96
|
+
|
97
|
+
for(var j=2; j < 5001 ; j++){
|
98
|
+
|
99
|
+
if(i !== j && data[i][1] === "SinglePhrase" && data[j][1] === "SinglePhrase" && data[j][15] !== "ok"){
|
100
|
+
|
101
|
+
if (data[i][12] === data[j][12] ) {
|
102
|
+
|
103
|
+
newarray[newarray.length - 1] = newarray[newarray.length - 1].concat(data[j]);
|
104
|
+
|
105
|
+
data[j].push("ok")
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
}
|
110
|
+
|
111
|
+
}
|
112
|
+
|
113
|
+
}
|
114
|
+
|
115
|
+
return newarray
|
116
|
+
|
117
|
+
}
|
118
|
+
|
119
|
+
function t() {
|
120
|
+
|
121
|
+
const book = SpreadsheetApp.getActive();
|
122
|
+
|
123
|
+
const data = book.getActiveSheet().getDataRange().getValues();
|
124
|
+
|
125
|
+
const result = compare(data);
|
126
|
+
|
27
|
-
|
127
|
+
book.getSheetByName("1").getRange(1,1,format.length,format[0].length).setValues(format);
|
128
|
+
|
129
|
+
//sheet_output.getRange(1,1,4053,45).setValues(result);
|
130
|
+
|
131
|
+
}
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
```
|
138
|
+
|
139
|
+
-- sample data
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q |
|
144
|
+
|
145
|
+
| - | ------------ | - | - | - | - | - | - | - | - | - | - | -- | - | - | -- | - |
|
146
|
+
|
147
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 1 | 3 | 4 | 5 | |
|
148
|
+
|
149
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | 5 | a |
|
150
|
+
|
151
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 30 | 3 | 4 | 5 | |
|
152
|
+
|
153
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | 5 | a |
|
154
|
+
|
155
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 30 | 3 | 4 | 5 | |
|
156
|
+
|
157
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | 5 | a |
|
158
|
+
|
159
|
+
| | a | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 40 | 3 | 4 | 5 | |
|
160
|
+
|
161
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 40 | 3 | 4 | 5 | a |
|
162
|
+
|
163
|
+
| | a | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 9 | 3 | 4 | 5 | |
|
164
|
+
|
165
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 10 | 3 | 4 | 5 | a |
|
166
|
+
|
167
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 1 | 3 | 4 | ok | |
|
168
|
+
|
169
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | ok | a |
|
170
|
+
|
171
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 30 | 3 | 4 | ok | |
|
172
|
+
|
173
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | ok | a |
|
174
|
+
|
175
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 30 | 3 | 4 | ok | |
|
176
|
+
|
177
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 20 | 3 | 4 | ok | a |
|
178
|
+
|
179
|
+
| | a | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 40 | 3 | 4 | ok | |
|
180
|
+
|
181
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 40 | 3 | 4 | ok | a |
|
182
|
+
|
183
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 9 | 3 | 4 | ok | |
|
184
|
+
|
185
|
+
| | SinglePhrase | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 10 | 3 | 4 | ok | a |
|