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

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

新規登録して質問してみよう
ただいま回答率
85.35%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google スプレッドシート

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

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

Q&A

0回答

1176閲覧

GASで「スプレッドシート内のツリーマップグラフ取得→画像化→googleDRIVE保存→LINEBOT送信」をした際、白黒化(色落ち)してしまいます

sleepingisdrago

総合スコア2

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google スプレッドシート

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

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

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

0グッド

3クリップ

投稿2021/03/20 14:56

当方GASを初めて1週間ほどの初心者です。
「Googleスプレッドシート内のグラフ挿入で作成したツリーマップをLINEBOTに送信する」の自動化をしました。
下記のGASスクリプトにてLINE送信まで大方うまくできていますが、2点どうしてもうまくいかないことがあります。

(1)グラフ画像が白黒化する

function graphLINE() {
// スプレッドシート取得
var ss = SpreadsheetApp.openById('10h_Zkz3cZpV6oonuf3fbe0J82mpLSVZh4pih9NkUnGk').getSheetByName('ツリー');
// シート内のグラフをすべて取得
var chart = ss.getCharts();

var folderId = '**'; // Googleドライブの一時フォルダのID
var to = '
*'; // LINEの送る先

var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'YYYY-MM-dd');

// グラフを画像に変換
var graphImg = chart[0].getBlob();
var folder = DriveApp.getFolderById(folderId);
var file = folder.createFile(graphImg)
file.setName(today);

getchartsでチャート取得し、getBlobで変換準備、creatfileで画像変換で色落ちする理由がわかりません。
改善できるようなメソッドや、他のソースコードなどはあるのでしょうか。

(2)gooleDRIVEへの保存が思う通りにいかない
「一時保存用ファイルにcreatfileし、LINEBOTに送信後自動消去」を行いたいのですが、
なぜか指定フォルダに入らずgoogleDRIVE直下に保存してしまう、かつ自動削除も行われません。

// グラフを画像に変換
var graphImg = chart[0].getBlob();
var folder = DriveApp.getFolderById(folderId);
var file = folder.createFile(graphImg)
file.setName(today);

// 公開設定する
file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT)
pushImage(to, file.getDownloadUrl(),file.getDownloadUrl())
DriveApp.getFolderById(folderId).removeFile(file)

createfileはフォルダクラスに対して処理を行えばいいと思っていたのですが、できませんでした。

上記2点について、もしご存知でしたら諸先輩方のお知恵をお借りしたく、何卒ご教示いただきますようお願い申しげます><

Google Apps Script(GAS)

function graphLINE() { // スプレッドシート取得 var ss = SpreadsheetApp.openById('10h_Zkz3cZpV6oonuf3fbe0J82mpLSVZh4pih9NkUnGk').getSheetByName('ツリー'); // シート内のグラフをすべて取得 var chart = ss.getCharts(); var folderId = '1m-HR_pA-zBJKx5C4uqJGkQ6wodoGUk5O'; // Googleドライブの一時フォルダのID var to = 'U7c9a3fc886ae93e8d72d3b5a2f902078'; // LINEの送る先 var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'YYYY-MM-dd'); // グラフを画像に変換 var graphImg = chart[0].getBlob(); var folder = DriveApp.getFolderById(folderId); var file = folder.createFile(graphImg) file.setName(today); // 公開設定する file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT) pushImage(to, file.getDownloadUrl(),file.getDownloadUrl()) DriveApp.getFolderById(folderId).removeFile(file) } // line developersに書いてあるChannel Access Token var access_token = '04URrJdI62EeMhD7skG1MQBtS0NfMY88oGcduFRTp/WD7X88TZTq7MUbx81TEl4Ycwp+/7n52lwiRuB9H7KN0w1irTxUok/ijSby59rDMtAd3NtePLhJHJrOwfnngERiE9w0PoiBv/kegZGWBEXRgwdB04t89/1O/w1cDnyilFU='; /** * 指定のuser_idにpushをする */ function pushImage(to, src, srcPreview) { var url = "https://api.line.me/v2/bot/message/push"; var headers = { "Content-Type" : "application/json; charset=UTF-8", 'Authorization': 'Bearer ' + ac![イメージ説明](53b94b031c834eaf88cb421c5410e51f.png)cess_token, }; var postData = { "to" : to, "messages" : [ { 'type':'image', 'originalContentUrl':src, 'previewImageUrl':srcPreview, } ] }; var options = { "method" : "post", "headers" : headers, "payload" : JSON.stringify(postData) }; return UrlFetchApp.fetch(url, options); }

グラフと色落ち後の様子

スプシ作成ツリーマップ
DRIVE保存時変換後画像

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

xail2222

2021/03/20 23:55

lineの処理はテストできないのでわからないですが 提示のコードで色々試してみました。色はきちんと残るしフォルダーも正しい所に出力されました。 何か特殊な条件でもあるのでしょうか…
sleepingisdrago

2021/03/21 03:37

検証いただきありがとうございます。 特殊な設定....していないつもりなのですが、心当たりとしては以下くらいでしょうか..... ・ツリーマップの最大値を3、最小値を-3にしています。→両方解除してみましたが上手くいきませんでした。 ・ツリーマップの文字(英語部分)のフォントを変えた。 ・ソースの chart[0].getBlob(); 部分の[0]という表記がまずいのかなとも考えましたが、[0]これを抜くと、実行完了と出るのに何も処理が行われないですね。。。 なお、同じsheet内にグラフはこのツリーマップしか作成していません。(別のsheetにはあり) ・2020年12月10日アップデート後のエディタを使用している。 もし何か違いがあればご教示いただけると幸いです><
xail2222

2021/03/21 05:02 編集

とりあえずは私の所では出来ましたので、差異を見つけていけばわかるかもしれないですね。 色落ちの検証としては何もしてないツリーマップを出力して色が消えないか。 つまり、別のシートにツリーマップを作成してみて、何も手を加えないで プログラムをその別のシート用に修正したのを新たに作ってみて実行してみる これでも色落ちしていれば、新たにスプレットシートを作って確かめる。とかでしょうか。 次に保存フォルダの件ですが console.log(folder.getName()); var parentFolders = folder.getParents(); while (parentFolders.hasNext()) { var parentFolder = parentFolders.next(); Logger.log(parentFolder.getName()); } をソースに埋め込んだりして、そのログをみて想定通りのフォルダになっているかを確認するとかですかね。。。 もっとスマートな調べ方もあるのかもしれませんが、私が調べるとしたら こんな所から手をつけるでしょうか。
sleepingisdrago

2021/03/22 11:22

ご丁寧にありがとうございます。 上記2点解決することができました!! 色落ちの件は、様々なパターンを試した結果ほとんどの場合で色古碑しなかったため、結局原因がよくわかりませんでした^^; 消去法的に考えると、vlookupや=A12&C12&D12で結合したりの関数を多用したことが何かしら奇跡的な悪さをしたのかなという風に思います。 フォルダの件は、removeがそもそも削除ではなく、見かけ上消すという意味合いのようだったので、setTrashed(true)でごみ箱に移動するという書き換えを行った結果正常に動作いたしました。 ご助言大変助かりました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問