Spreadsheetの画像が印刷されない問題解決
問題
Spreadsheetで画像を表示していて、PDFにして印刷しようとすると画像が表示されなくなることがある。
原因はわかっていないが、推測ではGoogleのサーバーでPDFをレンダリングする際に、一定時間以上経過するとロードされなかった画像は無視してPDFを作成しているような気がする。
つまり、画像を含めてSpreadsheetをPDF化して印刷しようとしても、Googleサーバーのご機嫌次第では表示されなくなる。
これは結構困りもので、人によっては表示されたり、画像によっては表示されたりと解決が難しい。
そもそも画像を表示する方法
よく紹介されている画像を表示する方法としては、Googleドライブ上にファイルを上げて、その画像のファイルIDを取得して、以下のようにIMAGE関数で表示している。
IMAGE("https://drive.google.com/uc?export=download&id={画像のファイルID}")
この方法では、PDFで印刷時に表示されない問題が発生する。
ちなみに、画像は誰でも見れる共有権限にしておかないと、IMAGE関数で表示できないので注意すること。
解決策
以下の方法で表示できた。
IMAGE("https://drive.google.com/thumbnail?id={画像ファイルID}")
おそらくこのURLはGoogleドライブの画像のファイルのサムネイルとして、少し画質が悪いがデータ量が少ないものを表示することになる。
私のケースではこの画質でも十分だったので、問題解決。
GASの備忘録
はじめに GASを使用するにあたって、結構細かい仕様が気になることがあります。 誰も気にしないような仕様を、備忘録として追記していきます。 備忘録 getLastRowは関数も含む getLastRow で値を含む最後の行を取得できます。 「値を含む」には、関数も含みます。 関数をコピーする GASで行を追加する際、関数が込みで行追加は面倒。 便利な関数が copyTo 。 これを使うと関数だけコピーとか、値だけコピーができる。 GASの種類 コンテナバインド型:Googleドキュメント経由で作成されたGAS スタンドアロン型:単体で作られたGAS https://developers.google.com/apps-script/guides/bound コンテナバインド型は一部特別な関数やイベントを使用することができる。...
シートがなければ作るというGAS
きっかけ SpreadsheetでGASを使っていて、自分がよくやるのが月毎にシートを分割すること。 例えば、「2022/01」のシートにはその月の売上をGASで登録する。 「2022/02」になったら、自動でその名前のシートを作って、登録する。 便利だが、GASでシートがなければ作るというのが少し面倒だったので、ここにメモしておく。 やりたいこと 特定のシート名のシートが、そのスプレッドシートに存在するかを確認する。 もしなければ、テンプレートとなるシートをコピーして、シート名を設定する。 さらに、そのシートを一番左に移動する。 戻り値として、シートを返す。 function createSheetIfNotExist(ss, sheetName) { const sheet = ss.getSheetByName(sheetName) if (sheet) return sheet const templateSheet = ss.getSheetByName('原本') const newSheet = ss.insertSheet(sheetName, 1, {template: templateSheet}) return newSheet } insertSheet関数は、第2引数で新規シートの挿入位置を指定できる。 さらに、{template: templateSheet}のように、テンプレートのシートを指定するオプションがある。 まとめ しっかりGoogleのドキュメントを読めば、サクッと解決できた。...