質問編集履歴

6

追記しました

2019/06/28 05:52

投稿

tarataia
tarataia

スコア17

test CHANGED
File without changes
test CHANGED
@@ -267,9 +267,3 @@
267
267
 
268
268
 
269
269
  追記 SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')の文字列リテラルを閉じました
270
-
271
- 動くかどうかコードをコピペして入力してみました
272
-
273
- エラーなどは発生しませんが、値がうまくシートに記載されないようです
274
-
275
- デバッグを行ったところシートの値は正しく読み取れている状態でsetDataの中身も特に問題点はなさそうでした

5

文章の修正

2019/06/28 05:52

投稿

tarataia
tarataia

スコア17

test CHANGED
File without changes
test CHANGED
@@ -270,4 +270,6 @@
270
270
 
271
271
  動くかどうかコードをコピペして入力してみました
272
272
 
273
- エラーなどは発生しませんが、なぜか値がうまくシートに記載されないようです
273
+ エラーなどは発生しませんが、値がうまくシートに記載されないようです
274
+
275
+ デバッグを行ったところシートの値は正しく読み取れている状態でsetDataの中身も特に問題点はなさそうでした

4

追記しました

2019/06/28 05:39

投稿

tarataia
tarataia

スコア17

test CHANGED
File without changes
test CHANGED
@@ -267,3 +267,7 @@
267
267
 
268
268
 
269
269
  追記 SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')の文字列リテラルを閉じました
270
+
271
+ 動くかどうかコードをコピペして入力してみました
272
+
273
+ エラーなどは発生しませんが、なぜか値がうまくシートに記載されないようです

3

SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')の文字列リテラルを閉じました

2019/06/28 04:16

投稿

tarataia
tarataia

スコア17

test CHANGED
File without changes
test CHANGED
@@ -130,7 +130,7 @@
130
130
 
131
131
  //コピー先のスプレットシートを取得する
132
132
 
133
- var ss_copyTo = SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx);
133
+ var ss_copyTo = SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
134
134
 
135
135
  var sheet_copyTo = ss_copyTo.getSheetByName('シート2'); //コピー先のスプレットシートの中のシート名
136
136
 
@@ -263,3 +263,7 @@
263
263
  3 etData.lengthは貼り付ける行数
264
264
 
265
265
  setData[0].lengthは貼り付ける列数になる理由・・・
266
+
267
+
268
+
269
+ 追記 SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')の文字列リテラルを閉じました

2

macaron_xxx様の回答・追記を受けて自分なりの解釈と疑問点を追記させていただきます

2019/06/28 03:30

投稿

tarataia
tarataia

スコア17

test CHANGED
File without changes
test CHANGED
@@ -105,3 +105,161 @@
105
105
  ![イメージ説明](ec86e7bbe7849d87fb706aabc7ccce09.png)
106
106
 
107
107
  やりたいこととしてはこのような感じにしたいと考えています
108
+
109
+
110
+
111
+ ## 追記
112
+
113
+ macaron_xxx様の回答・追記を受けて自分なりの解釈と疑問点を追記させていただきます
114
+
115
+
116
+
117
+ ```
118
+
119
+ function q197326() {
120
+
121
+ //コピー元のスプレットシートを取得する
122
+
123
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
124
+
125
+ var ss_copyFrom = ss.getSheetByName("シート1");
126
+
127
+ var fromData = ss_copyFrom .getDataRange().getValues(); // データは全部取る
128
+
129
+
130
+
131
+ //コピー先のスプレットシートを取得する
132
+
133
+ var ss_copyTo = SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx);
134
+
135
+ var sheet_copyTo = ss_copyTo.getSheetByName('シート2'); //コピー先のスプレットシートの中のシート名
136
+
137
+ var toData = sheet_copyTo.getDataRange().getValues(); // データは全部取る
138
+
139
+ ```
140
+
141
+ この部分は理解できました
142
+
143
+ ```
144
+
145
+
146
+
147
+ var tmpRow = (function(baseArr) {
148
+
149
+ var arr = [];
150
+
151
+ for (var i = 3; i < 15; i++) {
152
+
153
+ arr.push(baseArr[i]);
154
+
155
+ }
156
+
157
+ return arr;
158
+
159
+ })(toData[1]);
160
+
161
+ ```
162
+
163
+ tmprowを元の配列としてarrに空の配列を与えて、3列目(差額支払い日)から15列になるまで繰り返し処理を行ってbaseArr(基準の配列?)に配列を加える
164
+
165
+ その後returnでarrに返してtoDateに収納する
166
+
167
+ テンプレートになるという表現がとても分かりやすかったです
168
+
169
+ ```
170
+
171
+ var setData = fromData.reduce(function(acc, cur, idx, arr) {
172
+
173
+ if(idx !== 0) {
174
+
175
+ var row1 = tmpRow.concat();
176
+
177
+ row1[0] = cur[11];
178
+
179
+ row1[5] = cur[9];
180
+
181
+ row1[6] = arr[0][9];
182
+
183
+ row1[11] = cur[9];
184
+
185
+ acc.push(row1);
186
+
187
+ ```
188
+
189
+ acc(アキュムレーター)状態を保持するための引数? cur(現在値)idx(現在のインデックス)シートの行
190
+
191
+ arr(配列)上の行で作ったシート2のテンプレの配列
192
+
193
+ row1=tmpRowの部分に以下の配列を連結する
194
+
195
+ row1[0] = cur[11]; シート2の差額支払い日とシート1の支払日
196
+
197
+ row1[5] = cur[9]; シート2の仮払い金とシート1の支払金
198
+
199
+ row1[6] = arr[0][9]; この部分がいまいち理解できませんでした
200
+
201
+ row1[11] = cur[9]; シート2の仮払い金とシート1の支払金
202
+
203
+ acc.push(row1); 最新の配列(コピー先のデータ)に上の行でrow1に加えた情報を追加する
204
+
205
+ ```
206
+
207
+ if(cur[10] !== "") {
208
+
209
+ var row2 = tmpRow.concat();
210
+
211
+ row2[0] = cur[11];
212
+
213
+ row2[5] = cur[10];
214
+
215
+ row2[6] = arr[0][10];
216
+
217
+ row2[11] = cur[10];
218
+
219
+ acc.push(row2);
220
+
221
+ }
222
+
223
+ }
224
+
225
+ return acc;
226
+
227
+ }, []);
228
+
229
+ ```
230
+
231
+ シート1の差額の部分が空白でないならば変数row2を追加する
232
+
233
+ row2の部分は上の値が違うだけなので省略
234
+
235
+ return acc; if分で追加した要素を最新の配列コピー先のデータにreturnで戻す 
236
+
237
+ []が初期値なのは空の配列だからということであっているでしょうか?
238
+
239
+ ```
240
+
241
+ sheet_copyTo.getRange(sheet_copyTo.getLastRow() + 1, 4, setData.length, setData[0].length).setValues(setData);
242
+
243
+ }
244
+
245
+ ```
246
+
247
+ だいたいは理解できたのですが
248
+
249
+ setData.lengthは貼り付ける行数
250
+
251
+ setData[0].lengthは貼り付ける列数になるの部分がいまいち理解できていないです・・・
252
+
253
+
254
+
255
+ ## わからない部分
256
+
257
+ 1 今回使っているreduce関数と前回使っていただいたmap関数は役割的にかなり近いものがあると調べてみて感じたのですが今回reduce関数を使用した理由等があればお聞きしたいです
258
+
259
+ 2 row1[6] = arr[0][9]; この部分がいまいち理解できませんでした 
260
+
261
+ この部分はどのような役割を果たしているのでしょうか?
262
+
263
+ 3 etData.lengthは貼り付ける行数
264
+
265
+ setData[0].lengthは貼り付ける列数になる理由・・・

1

図表を追加しました

2019/06/28 01:46

投稿

tarataia
tarataia

スコア17

test CHANGED
File without changes
test CHANGED
@@ -95,3 +95,13 @@
95
95
  ```
96
96
 
97
97
  row[1]の中身がK列であると思ったので!==で空白でなければといった感じのif文を作り、insertRowBeforeで指定した行(K列)が入る前に新しい行を挿入して、J列をgetValuesで手に入れてきてから、setValuesで値を入れるような処理を考えたつもりでしたが動かなくて手詰まりになってしまったので、問題点等のご指摘をお願いします。
98
+
99
+
100
+
101
+ ## 図表
102
+
103
+ ![イメージ説明](e0542313af57765d5a5a9b3565287140.png)
104
+
105
+ ![イメージ説明](ec86e7bbe7849d87fb706aabc7ccce09.png)
106
+
107
+ やりたいこととしてはこのような感じにしたいと考えています