最近少しだけクラウドワークスでお仕事をしているのですが、Googleドキュメントの中に40個くらい画像があって、それをWordpressにアップロードしなきゃいけないんです。
で、Googleドキュメントで
「ファイル」→「ダウンロード」→「ウェブページ(.html、zip)」
ってやると、一括で保存できるんですけど、なぜか順番がバラバラになっちゃうんですよね。
本当に困っていて。
手作業で順番通りになるように名前を付けるのが手間でして。
で、Wordに変換してVBAのこのコードで画像保存をやってみたのですが、今度はなぜか画像サイズが違うという…
ということで、Googleドキュメントを操作するスクリプト(GAS:Google Apps Script)を作ってみました。
検索したところ、ドンピシャに欲しい機能を公開しているウェブページはなかったので、困っている誰かの参考になればいいなと思います。
やりたいこと:Googleドキュメントの画像一括保存
スクリプトでやりたいことは
- 指定のGoogleドキュメントを開く
- ドキュメント内の画像を取得
- 画像を順番通りに名前を付ける
- Googleドライブ内のフォルダに保存する
と、まぁ初めてのGASなので簡単にこれだけです。
スクリプト実行後、フォルダごとローカルにダウンロードすれば、やりたいことは完了!
スクリプト
まったくGASのことを知らない状態で調べながら作った&数年ぶりにスクリプトとか書いたのでへたっぴなコードですが、悪しからず…
function myFunction() {
//Googleドキュメントを開きます。
var doc = DocumentApp.openByUrl("GoogleドキュメントのURL");
var dogname = doc.getBlob().getName(); //拡張子ありのファイル名。
Logger.log(dogname);
//フォルダIDを指定
const folder = DriveApp.getFolderById('GoogleドライブのフォルダID');
var i = 0;
// document上の画像オブジェクトを取得する
const images = doc.getImages();
// 画像の数だけループ
for (let i = 0; i < images.length; i++) {
//画像として取得
var img = images[i];
var j = i + 1;
//ファイル名
var imgName = "sample" + j + ".png";
var imageBlob = img.getAs('image/png').setName(imgName);
//画像ファイルとして保存
folder.createFile(imageBlob);
}
Logger.log("終了しました。");
}
今回は、GoogleドキュメントのURLや、画像を保存したいフォルダはコードに直書きしちゃっています。
フォルダの指定はフォルダIDです。フォルダのURLからIDを取得できますよ。
画像は
const images = doc.getImages();
で全ての画像を取得できちゃって、とても簡単。
あとはループで一枚ずつ名前を付けて保存していくだけです。
初めてGASやってみて思ったこと
GAS、楽ですね!!!
変数を宣言する際に、型を指定しなくていいんですね!
VBAみたいに手こずるかなと覚悟していたら、サクッと実現できてびっくりしちゃいました。
それにしても、数年前はWord、Excelが主流だったのに、最近はGoogleドキュメント、Googoleスプレッドシートが主流になっていてびっくりです。
コロナで在宅勤務が加速して、オンラインで共有できるGoogleサービスが台頭してきたんでしょうね。
私は数年間(2人目の妊娠・出産~)パソコンすら触らないような生活だったので、「変わったな~」って浦島太郎状態に近いです。
GASでもっといろいろ効率化できるようにしていきたいですね。
またスクリプト作ったら共有します。
んじゃ、また~
コメント