EXCELのImage関数で表示させた画像を更新させる
2025/02/07

サーバ上の画像データを更新に合わせてExcelのImage関数出力も更新させる。
いつの頃からかExcelに備わったImage関数。これはWebサーバ上の画像をExcelで管理するうえで非常に便利なんです。しかし、サーバ上の画像データを更新してもExcelは頑なに古い画像を離してくれない。これを打破してみた。
いつの頃からかExcelに備わったImage関数。これはWebサーバ上の画像をExcelで管理するうえで非常に便利なんです。しかし、サーバ上の画像データを更新してもExcelは頑なに古い画像を離してくれない。これを打破してみた。
Excelは頑なに画像データを離さない
ExcelのIMAGE関数は、Webサーバー上の画像データを管理するのに非常に便利です。しかし、決定的な問題が一つあります。それは、Webサーバー上のデータが更新されても、Excelの画像が自動的に更新されないことです。
たとえファイルを閉じて再度開いても、Excelデータを更新しても、キャッシュをクリアしても、画像は最初のデータのままです。Excelが一度取得した画像をいつまでも保持する仕様(バグかも)だからでしょう。
Excelをだましたい
多分、【画像URL】←→【画像】という頑なな絆が構築されていると思います。
それでは、同じ画像のURLでも異なったものであるとExcelが誤認するように仕向けたらどうなるでしょう。
クエリ文字列で解決
通常、IMAGE関数は次のように指定します:
=IMAGE("画像url")
この場合、Webサーバーの画像を変更しても、Excelの画像は更新されません。
しかし、以下のようにクエリ文字列を追加すると、更新された画像が表示されます:
=IMAGE("画像url?xxx")
毎回異なるxxx
を指定することで、最新の画像が表示されるようになります。
ExcelにはRAND()
関数があるので、xxxの代わりに使えば、画像は適宜更新されることになります。
具体的には次のような式になります。(さすがに2回連続同じrand値が出ることはないと思います)
=IMAGE("画像url" & "?" & RAND())
これにより、セルの内容が変わったり手動で更新作業を行ったときに、新しい画像が表示されるようになります。
RAND()
関数の代わりにNOW()
関数(現在の日時のシリアル値)を使っても同じ結果が得られます。こちらの方が重複の可能性が低いのでエレガントかな?
めでたしめでたし。
コメント欄を読み込み中