🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Q&A

解決済

1回答

10994閲覧

google apps script ローカルにあるエクセルの参照方法

hisadark

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

0グッド

1クリップ

投稿2021/01/12 06:06

前提・実現したいこと

GASを用いて、商品名が書かれたメールを受信したら、ローカルに保存されているエクセルの表を参照して対応している数字を自動で返信したいです。
※エクセルの表は、A列に商品名、B列に現在庫になっています。
エクセルは1時間に自動で一度更新するように実装済です。

実装のイメージは下記のようにした。

(1. GASのトリガー機能を用いて数分以内の自動返信を行いたい。
(2. GASが起動したら、未読メールの送信者(from)と本文(body)を取り出す。

  ---未実装部分↓--------------------------------
(3. bodyの内容を受け取り、ローカルのエクセル(xls)より参照する。
ただし、ExcelVBAやBATやVBSでGASから起動できないと書いてあったので、
Google Driveへのアップロードを行い参照したい。

・ローカルからgoogleドライブへアップロードの処理 ※パス渡して自動で行う形式 ・アップロード済のエクセルを参照する方法。 ・参照し終わったらドライブから削除

   この上記の点を書き方の例を教えて頂きたいです。

---未実装部分↑--------------------------------
(4. メールに書かれた商品名に対応する在庫数を文字若しくは添付資料にて送信する。
(5. 既読にする

どなたか助けて下さい。
お願い致します。

google

1function getNewMail() { 2 //履歴保存用スプレッドシート指定 3 var sheetObj = SpreadsheetApp.openById('--------------------------------'); 4 var sheet = sheetObj.getSheetByName('history'); 5 6 7 // 未読のスレッドを検索対象にする 8 var searchCondition = 'is:unread'; 9 var threads = GmailApp.search(searchCondition, 0, 100); 10 var row =2 11 12 for (var i = 0 ; i < threads.length; i++) { 13 var msgs = GmailApp.getMessagesForThread(threads[i]); 14 15 for (var j = 0; j < msgs.length; j++) { 16 Logger.log(msgs[j].getSubject()); 17 } 18 //情報を抽出 19 20 var id = msgs[i].getId() 21 var date = msgs[i].getDate(); 22 var from = msgs[i].getFrom(); 23 var body = msgs[i].getBody(); 24 25 sheet.getRange(row, 1).setValue(id); 26 sheet.getRange(row, 2).setValue(date); 27 sheet.getRange(row, 3).setValue(from); 28 sheet.getRange(row, 4).setValue(body); 29 30 //返信の作成 31 reply_mail (from,body) 32 33 row++; 34 // スレッドを既読にする 35 threads[i].markRead(); 36 } 37} 38 39function reply_mail (from,body){ 40 var title = 'GASによるメール送信'; 41 var honbun ='本文は考察中'; 42 MailApp.sendEmail(from, title,honbun); 43 44}

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

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

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

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

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

guest

回答1

0

ベストアンサー

・ローカルからgoogleドライブへアップロードの処理 ※パス渡して自動で行う形式

Google が公式に提供している バックアップと同期 使うのが簡単です。

・アップロード済のエクセルを参照する方法。

Excelファイルを GAS から直接読み込む方法は多分無いので、一度スプレッドシートに変換するのが簡単です。手動でインポートしてもいいですが、GAS から変換を実行することも出来ます。

Drive API v2 をサービスに追加してから、以下のコードを実行すると Google Drive にある Excel ファイルをスプレッドシートに変換出来ます。
※新しいファイルに変換するだけなので、呼び出す前に前回変換したファイルを削除する必要があります。

Google Drive API v2 - Files: insert
https://developers.google.com/drive/api/v2/reference/files/insert#java

JavaScript

1const content = DriveApp.getFilesByName("Book1.xls").next().getBlob(); 2 3const dirId = DriveApp.getFoldersByName("testFolder").next().getId(); 4 5Drive.Files.insert({ 6 "mimeType": "application/vnd.google-apps.spreadsheet", 7 "parents": [{"id": dirId}], 8 "title": "Book1" 9}, content); 10

投稿2021/01/12 09:28

draq

総合スコア2577

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問