質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

5060閲覧

「GAS」複数のCSVファイルを処理して特定のスプレッドシートにまとめる

dell_0

総合スコア25

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2019/07/10 08:02

編集2019/07/10 08:03

ドライブ上にある複数のCSVファイルを特定のスプレッドシートにまとめ、振り分けもしたいです。

CSV1(エクセル表示)
東京  犬 白  1000
埼玉  猫 黒  500
千葉  鳥 黄  5
神奈川 鼠 茶  952
東京  雉 紺  4320
神奈川 豹 朱  795
東京  象 青  652

CSV2(エクセル表示)
東京  1 red  あ
埼玉  2 black い
千葉  3 blue う
神奈川 4 yellow え
東京  5 green お
神奈川 6 orange か
東京  7 white  き

このような2つの.csvファイルがドライブ上にあったとした場合、
東京に該当している特定のデータのみを、「東京」という名前のスプレッドシートを生成したいです。

場所  名前 色  ひらがな color
東京  犬 白   あ red
東京  雉 紺   お green
東京  象 青   き white

このような状態にしたいです。

また、上記の東京に該当したデータを「東京」という名前のスプレッドシートを自動生成し、
神奈川の場合は

場所   名前  色  ひらがな color
神奈川 鼠 茶  え    yellow
神奈川 豹 朱  か    orange

神奈川に該当したデータを「神奈川」という名前のスプレッドシートを自動で作るスクリプトが組みたいです。

一つのスクリプトで複数のCSVを読み込み、複数のスプレッドシートを同時に生成できるのでしょうか?

それをGAS上でどのようにして実現できるかご教授ください。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/07/10 09:34

前回質問はどうなったのかと、コード書いてほしいならそのcsvがドライブのどこにどう存在して、どうやって特定するのか追記してください。
dell_0

2019/07/12 04:48

今回質問した内容に変更しため、削除方法がわからず、解決済みとさせていただきました。 ご迷惑をおかけし、申し訳ございません。 2つのCSVをマイドライブに置き、実行して、事前に作っておいたフォルダに生成されるのが理想ですが、それが可能かどうかの判断もつかない初心者です。 回答いただきありがとうございました。
dell_0

2019/07/17 09:57

申し訳ございませんが、ご教授頂けたら幸いです。 調べているのですが、const folderId = ""; const fileIds = ["", "", ""];const delimiter = ",";の設定の仕方が分かりません。マイドライブに2つのCSVを置き、マイドライブにあらかじめ作っておいて[東京][埼玉][千葉][神奈川]のフォルダに自動に振り分けたい場合は、どのように記載したらよろしいのでしょうか。
guest

回答1

0

ベストアンサー

javascript

1function q199730() { 2 // せっていせなあかんやつ 3 const fileIds = ["", ""]; 4//さわらんでええやつ 5 const delimiter = ","; 6 const dat = fileIds.map(function(f){ return Utilities.parseCsv(DriveApp.getFileById(f).getBlob().getDataAsString(), delimiter);}).reduce(function (a, c) { return a.concat(c);}).reduce(function (acc, r) { 7 if(!acc[r[0]]) { 8 acc[r[0]] = [r]; 9 } else { 10 acc[r[0]] = acc[r[0]].concat([r]); 11 } 12 return acc; 13 }, {}); 14 Object.keys(dat).forEach(function (r) { 15 SpreadsheetApp.create(r).getSheets()[0].getRange(1, 1, dat[r].length, dat[r][0].length).setValues(dat); 16 }); 17}

投稿2019/07/11 16:02

編集2019/07/31 10:11
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dell_0

2019/07/16 07:22

前回は大変失礼いたしました。 解決済みにしてしまうと、ベストアンサーが選べず、申し訳ありませんでした。 また、今回も回答いただき、大変感謝しております。ありがとうございました。
papinianus

2019/07/17 10:21

ファイルidという概念はわかりますよね。 ""の間にファイルidを一つずつかいてください
dell_0

2019/07/18 02:39

ご回答、ありがとうございます。 TypeError: オブジェクト マイドライブ で関数 getFileById が見つかりません。(行 7、ファイル「コード」)と出てしまいます。。 const fileIdsにはマイドライブ上にある2つのCSVのファイルidを記載しました。
dell_0

2019/07/19 03:08

ありがとうございます。 度々申し訳ございませんが、今度はTypeError: undefined のメソッド「concat」を呼び出せません。と出てしまいます。
papinianus

2019/07/19 10:25

また間違ってました
dell_0

2019/07/22 01:26

ご回答、ありがとうございます。 ReferenceError: 「r」が定義されていません。(行 15、ファイル「コード」)と出てしまいます。。 こちらで何か指定をしなければならないのでしょうか?
papinianus

2019/07/23 10:12

またまた間違ってました
dell_0

2019/07/29 03:07

ご回答、ありがとうございます。 こちら、再度エラーが出てしまい、15行目のgetRaneをgetRangeに、setValuesをsetValueに変更したところ、エラーは出ずに動作しましたが、文字化けしたスプレッドシートが永遠吐き出されるような状態になってしまいました。。
papinianus

2019/07/31 10:14

setValuesは変えなくて良かったはず。 文字化けはgetDataAsString()のところをgetDataAsString("Shift_JIS")などと望む文字コードを指定してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問