Excelファイルから画像を取り出す

神エクセルから画像だけを頂戴します。

なぜかメールで写真を送るだけなのに、Excelに貼り付けて送ってくる上司、あなたの会社にもいませんか?Excel以外はアプリにあらず。そんなExcel原理主義者が生み出す謎ファイル、ありますよね。

はたまた、いわゆる神エクセルの報告書やら台帳やらに貼り付けてある写真。よけいなものはいらないから写真だけをくれという場合ありませんか?

Excelファイルの正体は、XMLと付帯するバイナリデータをまとめたZIPファイルである。というのは結構有名な話かと思います。このXMLには、どのシートのどのセルにどんな値があるよ、ということが延々と記述されています。画像などのファイルはまとめてフォルダに保存され、どの画像がどこに貼ってあるんだよ、という情報がXMLに記されています。

Excelアプリは、このXMLを読み取りワークブックとして組み立てて表示しているわけです。

実は、Excelファイルの拡張子をむりやり変更してZIPファイルとして展開することで、これらの「Excelの中身」を見ることができます。よって、その中から画像が保存されているフォルダを取り出すことで画像だけを手に入れられるのです。

と、ここまではネット上でぼちぼち出回っている情報なので、ご存じの方や、実際にやってみた方もいらっしゃるでしょう。たしかにこの方法で画像ファイルを抜き出すことはできます。

しかし!神エクセル撲滅協会理事(自称)の私としては、それでは納得できません!もっとスマートかつスタイリッシュに神エクセルを葬り去りたい!

ということで、神エクセルをゴミ箱に放り込む感覚で、画像だけを取り出すアプリを完成させました。


理屈は簡単で、前述の拡張子を変更して取り出す手順を自動化しているだけです。スクリプトはPythonで次のような極めて簡単なコードです。

import os
import sys
import zipfile

file = sys.argv[1]

with zipfile.ZipFile(file) as xlsx:
    for file_name in xlsx.namelist():
        if 'xl/media/' in file_name:
            xlsx.extract(file_name, os.path.dirname(__file__))

これをPyInstallerで実行ファイルとしてアプリ化しています。

アプリに神エクセルをドラッグ&ドロップすることでこのスクリプトが走ります。取り出した画像ファイルはアプリがある場所へ[xl/media/]というフォルダ構成で出力されます。なぜこんなフォルダ構成かというと、Excelがそうだからです。本当に、そのまま抜き出しているだけです。面倒くさいので。

(全然スマートじゃないじゃんという突っ込みは聞こえません。)

元になったExcelファイルには何も影響を与えませんので、そのまま利用できます。いずれ、放ったファイルを画像だけ抜いてそのままゴミ箱へ直行させる機能をつけたいですね。

アプリはページ下部からダウンロードできます。

使用方法

拡張子xlsのファイルは処理できません。xlsxに保存しなおすか、あきらめてください。

サンプルとしてこのようなファイルを手元にあったので使います。準備しました。ここから画像だけ取り出します。

excel_image_ex1.jpg


1.アプリを入手して適当なフォルダへ配置してください。

excel_image_ex2.jpg


2.アプリへ対象のExcelファイルをドラッグ&ドロップします。コマンドプロンプトの黒い画面が一瞬見えると思いますが、こいつの仕業です。ウイルスではありません。ご安心ください。

excel_image_ex3.jpg


3.アプリがあるフォルダへ【xl】というフォルダができます。

excel_image_ex4.jpg


4.【xl】フォルダの中の【media】フォルダに画像データがあります。

excel_image_ex5.jpg

エラーはすべて握り潰す仕様ですので、何も起こらなかったらエラーしています。

アプリを入手する

利用上のご注意
  • ダウンロードしたファイルを利用したことにより生じた結果については、利用者ご自身に責任を負っていただきます。
  • ご利用前に使用方法をご確認ください。
  • 当方は成果物の正確性について最善を尽くしますが保証はいたしません。
  • Windows10-64bit Excel2016-32bit環境でのみ動作確認済み。

excel_image_extraction.exe

DOWN LOADボタンが押下された時点で注意事項に同意したものとみなします。

ソースコードから実行する

得体の知れないサイトで拾った実行ファイルなんて使えねーよというかたは、ソースコードから実行できます。ダウンロードボタンからソースコード(.pyファイル)を入手してください。

対象のExcelブックをコマンドラインから引数でわたすか.pyファイルにドラッグ&ドロップすると実行されます。詳細は次の記事を参考にしてください。

ソースコードをダウンロード

excel_image_extraction.py

DOWN LOADボタンが押下された時点で注意事項に同意したものとみなします。

用法を守って正しくお使いください。

related pages
PCのカメラでQRコードを読み取りPythonに取り込みHTMLで表示する
QRコードの読み取り結果をWebSocketを使ってHTMLに表示するの巻。

Pythonでバーコード、QRコードを読み取るのはすこぶる簡単ですが、その結果をリアルタイムに表示させる方法には一考の余地があります。Excelシートへの表示、HTMLとAjaxでの表示をやりましたが、今回はHTML方式を発展させて、WebSocketを使った高速リアルタイム更新で物品管理チックなことができるようにします。

Read More ...
結合セルで集計できない表を何とかする
人間にしか読めない表をPCで使えるように正規化します。

セルの結合は使ったその瞬間から「データとしての価値」がなくなります。Excelは結合されたセルが同じ値をグループ化したものだとは認識しません。集計などの計算をしたり、データベースとして使用したりするためには表が正規化されている必要があるのです。

Read More ...
Pythonにドラッグ&ドロップでファイルをわたす超簡単な方法
ファイルをドラッグ&ドロップで処理させる一番簡単なやり方。

PythonとExcelをハイブリッドに駆使するという当サイトのコンセプト上、ExcelブックをPythonスクリプトにわたさなければならない機会が多々あります。順当にやるならパスを引数にしてわたす方法ですが、もっと超絶簡単にできるんです。

Read More ...
この記事の
作成日

2019-09-16

更新日

2020-07-12

ページ内検索
目次
WEB MASTER
さいた
神エクセル撲滅協会理事(自称)
さいたま市民 埼玉こそ地上の楽園