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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google ドライブ

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

Google Apps Script

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

Q&A

解決済

1回答

7390閲覧

GASでGoogleドライブ上にある画像を更新する

mo256man

総合スコア43

Google ドライブ

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

Google Apps Script

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

0グッド

1クリップ

投稿2020/01/25 05:25

実現したいこと

GASで、Googleドライブ上にある既存の画像を更新するにはどうしたらよいでしょうか。
画像更新といってもスクリプトで絵を修正するわけではありません。画像はGoogleスプレッドシートのグラフで、docs.google.com/spreadsheets/…&format=image で公開するのではなくpngで保存しています。Twitterに画像として公開するためです。
スプレッドシートの中でデータが追加されグラフが変わったらドライブに保存されたpng画像も更新したい、ということです。

同名データを削除しあらためてその名で新規保存するという方法では実現できました。
しかしこれではエレガントでないので、ファイルIDを使って更新したいです。

成功

とはいえ、美しくない

Google

1var filename = "chart.png"; 2var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3var sheet = spreadsheet.getSheetByName("xxx"); 4var chart = sheet.getCharts()[0]; 5var blobImg = chart.getBlob().getAs("image/png").setName(filename); 6 7// 同名データを削除し、新規保存する 8var folderID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 9var folder = DriveApp.getFolderById(folderID); 10var files = folder.getFilesByName(filename); 11if (files.hasNext()) { 12 folder.removeFile(files.next()); 13} 14folder.createFile(blobImg);

失敗

保存(更新)されたファイルは「Blob」という内容のテキストになってしまう
テキストの更新ならこれが正しいやり方

Google

1// 前半は省略 2var fileID = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; 3var file = DriveApp.getFileById(fileID); 4file.setContent(blobImg);

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

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

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

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

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

guest

回答1

0

ベストアンサー

Google Drive上にある既存の画像ファイルを上書きしたいとの理解です。

この場合、Drive APIを使用する必要があります。このためにご使用中のスクリプトを下記のように変更してみてください。

スクリプト

実行の前にはスクリプトエディタ上で「リソース」->「Goolgeの拡張サービス」でDrive APIを有効にしてください。

From

javascript

1if (files.hasNext()) { 2 folder.removeFile(files.next()); 3} 4folder.createFile(blobImg);

To

javascript

1if (files.hasNext()) { 2 Drive.Files.update({}, files.next().getId(), blobImg); 3} else { 4 folder.createFile(blobImg); 5}
  • 上記の変更では、folderIDのフォルダ内にfilenameのファイル名が無い場合は、Blobは新規作成としてファイル保存されます。もしもfilenameのファイル名がフォルダ内に既に存在する場合は、Blobはそのファイルへ上書き保存されます。このため、ファイルIDは変化しません。

参考

投稿2020/01/26 07:27

kisojin

総合スコア899

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

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

mo256man

2020/01/26 11:07

公式のリファレンスまで紹介していただき、大変恐縮です。 希望通りの動きができました。ありがとうございました。
kisojin

2020/01/29 07:39

ご返事ありがとうございます。無事解決できたとのことで安心しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問