質問編集履歴

2

コードと質問内容を修正しました

2022/07/24 02:07

投稿

GAKI
GAKI

スコア5

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,6 @@
1
1
  ### 前提
2
2
  ノンプログラマーのド素人です。
3
3
  画像の通り、「_」より前の名前別でシートに自動でインポートさせたいです。
4
-
5
4
  色々なサイトをググって、コードを借りて実装してみたのですが、安定して取り込みができません。
6
5
  (想定外のシートに取り込まれたり、貼り付け先のシートにデータが入っていないと途中でストップしたり・・)
7
6
 
@@ -10,66 +9,73 @@
10
9
  ### 実現したいこと
11
10
 
12
11
  - [ ] ドライブのフォルダにあるファイルをスプレッドシートに毎日自動でインポートしたい
12
+ - [ ] 同じシートの最終行へどんどん追加されていくようにしたい
13
+ - [ ] 自動でインポートされたものから、順次、使用済みフォルダへ移動させたい
13
14
 
14
- <ファイル名>
15
- AAA_yyyymm.csv
15
+ ----------
16
- BBB_yyyymm.txt
17
- CCC_yyyymm.csv
18
-
19
- <シート名>
20
- AAA
21
- BBB
22
- CCC
23
16
 
24
17
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-23/d55e0ff7-6b17-4ca1-86c4-6c65f018622b.png)
18
+ ----------
25
19
 
26
20
  ### 発生している問題・エラーメッセージ
27
21
 
28
- ```
22
+ コードを修正して、実装してみました。
29
- The parameters (SpreadsheetApp.Sheet) don't match the method signature for SpreadsheetApp.Range.setValues.
23
+ ファイルの移動はできたのですが、肝心のスプレッドシートへの転記が全く動きません。
30
- ```
24
+ データの取得からセットまでのコードの正解がわかりません。。
25
+
31
26
 
32
27
  ### 該当のソースコード
33
28
 
34
29
  ```GAS
35
- function getFileList2_1() {
30
+ function ABCファイル() {
31
+
32
+ const AAA = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('AAA');
33
+ const BBB = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('BBB');
34
+ const CCC = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('CCC');
36
35
 
37
- const ss = SpreadsheetApp.getActiveSpreadsheet();
38
- const sheet = ss.getSheetByName('AAA');
39
36
  let row = 1;
40
37
 
38
+ //指定フォルダ内のファイルを一括取得(FileIteratorオブジェクト)
39
+ const files = DriveApp.getFolderById('▲読み込み先フォルダID▲').getFiles();
41
- // A列の値をクリア
40
+ //使用済みフォルダ(上記フォルダ内)
42
- sheet.getRange(1,1,sheet.getMaxRows(),1).clearContent();
41
+ const moveDir = DriveApp.getFolderById('▲移動先フォルダID▲');
43
42
 
44
- // 指定フォルダ内のファイルを一括取得(FileIteratorオブジェクト)
43
+ //正規表現で絞り込む
45
- const files = DriveApp.getFolderById('▲フォルダID▲').getFiles();
44
+ const AAAreg = /^AAA.*?$/;
45
+ const BBBreg = /^BBB.*?$/;
46
+ const CCCreg = /^CCC.*?$/;
46
47
 
47
- const reg = /^AAA.*?$/;
48
-
49
-
50
48
  while (files.hasNext()) {
51
49
 
52
50
  const file = files.next();
53
51
  const filename = file.getName();
54
52
  console.log(filename);
53
+
54
+ const fileId = file.getId();
55
+ const blob = DriveApp.getFileById(fileId).getBlob();
56
+ const csv = blob.getDataAsString();
57
+ const values = Utilities.parseCsv(csv);
58
+ values.shift();
55
59
 
56
- if (filename.match(reg)) { //条件に合致するファイル名のみ書き込み
60
+ if (filename.match(AAAreg)) { //条件に合致するファイル名のみ書き込み
61
+ const lastRow= AAA.getRange(1, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
57
- const paste_last_row = sheet.getLastRow();
62
+ AAA.getRange(lastRow, 1).setValue(values);
58
-
63
+ row++;
64
+ }
65
+ if (filename.match(BBBreg)) { //条件に合致するファイル名のみ書き込み
66
+ const lastRow= BBB.getRange(1, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
59
- const lastRow = sheet.getLastRow();
67
+ BBB.getRange(lastRow, 1).setValue(values);
68
+ row++;
69
+ }
70
+ if (filename.match(CCCreg)) { //条件に合致するファイル名のみ書き込み
71
+ const lastRow= CCC.getRange(1, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
60
- const lastCol = sheet.getLastColumn();
72
+ CCC.getRange(lastRow, 1).setValue(values);
73
+ row++;
74
+ }
61
75
 
76
+ SpreadsheetApp.flush()
62
- sheet.getRange(paste_last_row, 1 , lastRow, lastCol).setValues(sheet);
77
+ file.moveTo(moveDir);//使用済みフォルダに移動
63
- row++;
64
- }
65
78
  }
66
- }
79
+ }
67
80
  ```
68
81
 
69
- ### 試したこと
70
-
71
- 色々試しすぎて、、まとめられません、、
72
-
73
- ### 補足情報(FW/ツールのバージョンなど)
74
-
75
- コンテナバインドスクリプトで作成しています

1

イメージ画像を追加しました

2022/07/23 12:07

投稿

GAKI
GAKI

スコア5

test CHANGED
File without changes
test CHANGED
@@ -20,6 +20,8 @@
20
20
  AAA
21
21
  BBB
22
22
  CCC
23
+
24
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-23/d55e0ff7-6b17-4ca1-86c4-6c65f018622b.png)
23
25
 
24
26
  ### 発生している問題・エラーメッセージ
25
27