はじめに
AIの学習データ整理のために、ローカルにある画像をExcelシート上で一覧表示したいことがあったので、手法をメモしておきます。
Excelには =IMAGE(URL) という関数があり、URL先の画像をセル内に表示できます。ただしこの関数には以下の制約があります。
-
https://のURLのみ対応。-
http://は#BLOCKED!エラー -
file:///や相対パスは#VALUE!エラー
-
- リダイレクトURLもセキュリティ上の理由でブロックされる
(詳しくは公式ドキュメントを参照)
要するに単純な https:// しか表示してくれません。
この制限を回避するために、ローカルで CaddyをHTTPSファイルサーバーとして立ち上げます。ドメインは *.localhost を用います。
本記事は macOS Sequoia + Caddy 2.10 + Excel for Mac 16.7 で検証しています
Caddyについての紹介記事は過去の記事、 特に localhost ドメインについての記事 をご覧ください。
手順
Caddyをインストールして、画像ディレクトリをルートに指定して起動します。
# macOS の場合
brew install caddy
# 画像フォルダを指定してCaddy を立ち上げる
caddy file-server --domain excelimage.localhost --root /path/to/images_dir
初回はCaddyのローカルCA証明書をインストールするためパスワードを求められます。*.localhost ドメインは通常DNS設定不要で 127.0.0.1 に解決される特別なドメインで、そのドメインに対してCaddyが自動でHTTPS証明書を発行してくれます。
あとはExcel側で =IMAGE(...) から参照するだけです。
=IMAGE("https://excelimage.localhost/photo1.jpg")
ちゃんと画像が表示されました!
もし画像が表示されなかった場合はExcelのセキュリティ設定(外部コンテンツ許可)を見直してみてください
