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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

3265閲覧

Google app script JSONデータをCSVに保存したい

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/07/24 23:27

編集2019/07/24 23:27

初心者です。宜しくお願いいたします。lineで打った文字をひたすらCSVに保存させたいです。
以下のようなイメージです。

変数→これがLINEから打った文字|2019/7/25 8:08:09|データ1|データ2|
|:--|:--:|--:|

これはLINEから打った文字がCSVに保存されます。
例えば数分後にLINEで売った文字は、プログラム上で以下のように自動で「改行」されて
あとはひたすら下の行に追記していくイメージです。

変数→これがLINEから打った文字|2019/7/25 8:08:09|データ1|データ2|
|:--|:--:|--:|
2回目にうった文字です|2019/7/25 8:10:0|データ1|データ2|

#ためしたこと

以下をためしましたがlineからの情報とCSVの追記をつなぐ部分ができません。
まず実際にcsvを作成し保存するところはできたので以下記載します。

/* csvを作成する */ function save_as_csv() { var abc = "変数" var titime = Getnow() var data = abc + "," + Getnow() + "," + "データ1,データ2\nデータ3" + "," + "データ4,データ5\nデータ6"; /* var data = "でーた1, でーた2\nでーた3";*/ create_file(data,abc); } function Getnow() { var d = new Date(); var y = d.getFullYear(); var mon = d.getMonth() + 1; var d2 = d.getDate(); var h = d.getHours(); var min = d.getMinutes(); var s = d.getSeconds(); var now = y+"/"+mon+"/"+d2+" "+h+":"+min+":"+s; return now; } /*年 getFullYear 月 getMonth 実際の月に合わせるためには+1する必要がある 日 getDate 曜日 getDay 時間 getHours 分 getMinutes 秒 getSeconds */ function create_file(data) { var content_type = "text/csv"; /* content_typeを設定する */ var file_name = "CSV_SAMPLE_NAME"; /* ファイル名を設定する */ var blob = Utilities.newBlob("", content_type, file_name) /* Blob objectを作成して */ var file = blob.setDataFromString(data, "utf-8"); /* dataと文字コードを渡し */ var folder = DriveApp.getFolderById("hoge"); /* 指定したフォルダに */ folder.createFile(file); }

またLINEからの文字は以下よりjsonで取得しているのですが上記関数と組み合わせてCSVを作成・追記する方法がわかりませんでした。
sampleTextに入っているイメージです。

const TextResponse = UrlFetchApp.fetch(visionRequestUrl, { method: "POST", contentType: "application/json", payload: payload, }) const sampleText = TextResponse.getContentText(); //戻ってきたJSONデータ //LINE返信用関数 UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", { "headers": { "Content-Type": "application/json; charset=UTF-8", "Authorization": "Bearer " + LINE_ACCESS_TOKEN, }, "method": "post", "payload": JSON.stringify({ "replyToken": replyToken, "messages": messages, }) }); }

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

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

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

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

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

guest

回答1

0

Googleドライブ内にcsvファイルを作成し、LINEで文字列が送信されると、下の行に次々と上書きしていきます。

変えてほしい所は、folderIdとfileNameとデータ1とデータ2です。

LINEから文字列で取得できるという前提で載せます。

//csvを作成する function save_as_csv(text) { //text -> LINEで取得した文字列(jsonファイルの時は、文字列のみ取り出してください) //初期設定 const folderId = 'フォルダId'; //###ここは変えてください const fileName = 'ファイル名'; //###ここは変えてください //前回までの情報 const csv = []; const folder = DriveApp.getFolderById(folderId); //操作するフォルダー const oldFile = folder.getFilesByName(fileName); //ファイル //ファイルが存在する場合のみ読込 if(oldFile.hasNext()) { const file = oldFile.next(); //前回保存したcsvファイル folder.removeFile(file); //前回のファイルを削除 const csvFile = file.getBlob().getDataAsString('UTF-8'); //csvファイルを読み込み csv.push(Utilities.parseCsv(csvFile)); //csvを二次元配列に変換 } //今回の情報 const time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss'); //現在の日時 const data1 = 'データ1'; //###ここは変えてください const data2 = 'データ2'; //###ここは変えてください csv.push([text, time, data1, data2]); //データを追加 //2次元配列になっているデータをcsvに変換 const data = csv.map(function(v){ return v.join(','); }).join('\n'); //csvファイルを保存 const blob = Utilities.newBlob('', 'text/csv', fileName); //csvファイルを作成 const newFile = blob.setDataFromString(data, 'utf-8'); //csvファイルにデータをセット folder.createFile(newFile); //csvファイルを保存 }

投稿2019/08/01 14:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/08/01 15:06

追記です。 上のコードだと、3回目以降から横に繋がります。 //前回までの情報 から //今回の情報 までを下記のコードに変更してください。 //前回までの情報 const folder = DriveApp.getFolderById(folderId); //操作するフォルダー const oldFile = folder.getFilesByName(fileName); //ファイル //ファイルが存在する場合 if(oldFile.hasNext()) { const file = oldFile.next(); //前回保存したcsvファイル folder.removeFile(file); //前回のファイルを削除 const csvFile = file.getBlob().getDataAsString('UTF-8'); //csvファイルを読み込み var csv = Utilities.parseCsv(csvFile); //csvを二次元配列に変換 } //ファイルが存在しない場合 else var csv = []; //今回の情報
退会済みユーザー

退会済みユーザー

2019/08/01 15:19

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問