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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Google Apps Script

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

JavaScript

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

Q&A

3回答

1152閲覧

Googleスプレッドシートの折れ線グラフをGAS経由でGoogleDriveに保存すると形状がおかしくなる

Sonya

総合スコア6

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Google Apps Script

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

JavaScript

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

0グッド

2クリップ

投稿2018/08/16 06:46

編集2022/01/12 10:55

質問内容

Googleスプレッドシートで作成したグラフ(画像1)を、GoogleAppsScriptからGoogleDriveの特定のフォルダに保存する
スクリプトを書いたのですが、グラフの見た目がスプレッドシートと全然違う画像(画像2)として保存されてしまいます。

グラフは折れ線グラフで、グラフエディタから軸の最小値,最大値などを細かくカスタマイズしています。

ちなみに手動でグラフの右上をクリックして"画像を保存"を選択した場合は正常に保存されます(画像3)。
どなたか情報をご存知でしたらご教示いただけませんでしょうか。

画像1
画像1

画像2
画像2

画像3
画像3

該当のソースコード

GS

1var charts = sheet.getCharts(); 2 3var chartImage = charts[0].getAs('image/png').setName("test.png"); 4 5var folder = DriveApp.getFolderById("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); //GoogleDriveフォルダをオブジェクトで取得 6folder.createFile(chartImage);

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

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

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

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

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

papinianus

2018/08/16 10:35

似た現象を確認しましたが、手動で保存というのはどのような方法でしょうか?(画面をキャプチャしている?)
Sonya

2018/08/16 11:12

説明不足で申し訳ございません。手動で保存とはスプレッドシート上でグラフの右上をクリックして、"画像を保存"を選択した場合となります。
macaron_xxx

2018/08/20 00:14

getAsでBlobになったときに、グラフの諸々の情報が失われているのではないかと思います。(Blobにそういう情報を持てないのかも)そのあたりの仕組みを少し調べてみますね。
Sonya

2018/08/23 22:11

おっしゃる通りグラフの情報が失われている気がします。お手数ですがよろしくお願いします。
guest

回答3

0

私も調査を待っているのですが、現実的なところとして。

googleドライブは、手で実行できる全てが、gasで実行できるわけではありません。
(個人的に遭遇したことのあるのは、関数を使わずにメニューからマウス操作でセルに付与したハイパーリンクが取得・再現できない、というものです)

また、Embedded-chartには、getAs()とgetBlob()がありますが、いずれも質問者さまご確認のように、プロットした数値は正しいものの、オプションは反映されません。

おそらく、blobに変換する内部の仕組みが、オプションを解釈するようになっていないのだと思います(実装は不明)ので、gasでは打てる手がありません。
(getAsやgetBlobは軸などに関する引数を受け付けないので、反映のさせようがない。いずれできるかもしれないですが…)

投稿2018/08/24 01:07

papinianus

総合スコア12705

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

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

0

コードを書いていないので正常に動くか分かりませんが、seleniumのwebdriverで、直接ブラウザから操作してしまうのはいかがでしょう。GASから、前述のプログラムを起動すれば一連の流れでできると思います。

投稿2018/08/21 02:08

YugoNakashima

総合スコア42

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

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

0

別途画像サイズなどのパラメータを指定した方がいいのかもしれないですね…。

グラフ(EmbeddedChart)の画像はmodify()でEmbeddedChartBuilderにすると変更できます。

var chartImage = charts[0].getAs('image/png').setName("test.png");

のところを、

var chart = charts[0]; chart.modify() .setOption('width', 800) .setOption('height', 640) .setPosition(5, 5, 0, 0) .build(); var chartImage = chart.getAs('image/png').setName("test.png");

といったように細かく指定してみるとどうでしょうか(数字はリファレンスのサンプルのままなので、適宜変更してください)。

投稿2018/08/18 12:28

takahashim

総合スコア1877

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

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

Sonya

2018/08/19 23:23

ご回答いただきありがとうございます。 上記の通りグラフのサイズを明示的に変更してみたのですが、結果は変わらずでした。 どのように指定しても質問文の画像2のように横長の画像で保存されてしまいます。 一方、プロットした数値は適時反映されているため、画像取得の際にグラフの体裁だけ初期化されてしまう仕様なのでしょうか。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問