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

Excel シートに貼り付けられた画像をファイルとして取得する、というのを .NET (C#) のプログラムで実現する方法を示します。

拡張子が .xlsx (Open XML 形式) の Excel ファイルの実体は ZIP ファイルとなっており、
中には XML ファイルや画像ファイルが格納されています。
画像ファイルは、 xl/media フォルダーに存在します。

xl/media フォルダー

 

これを .NET Framework 4.5 で追加された ZipFile クラスを利用して取り出すことを考えます。

単に ZIP ファイルからすべてのファイルを展開するだけであれば ZipFile.ExtractToDirectory メソッドを、
逆に、フォルダーにあるすべてのファイルを圧縮するだけであれば ZipFile.CreateFromDirectory メソッドを呼び出します。
それぞれ 1 行だけコードを書けば終了です。

ですが、今回は ZIP ファイルの中から一部のファイルだけを取り出すため、ZipFile.OpenRead メソッドを利用します。
参照に System.IO.Compression.dll と System.IO.Compression.FileSystem.dll を追加して、
Program.cs を次のように実装します。


using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;

namespace ExcelMediaConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            var excelFilePath = "Book1.xlsx";
            var outputDirPath = "Media";

            Directory.CreateDirectory(outputDirPath);

            using (var archive = ZipFile.OpenRead(excelFilePath))
            {
                var query = archive.Entries
                    .Where(e => e.FullName.StartsWith("xl/media/", StringComparison.InvariantCultureIgnoreCase));

                foreach (var entry in query)
                {
                    var filePath = Path.Combine(outputDirPath, entry.Name);
                    entry.ExtractToFile(filePath, true);
                }
            }
        }
    }
}


 

xl/media フォルダーに存在するファイルを抽出して展開します。
通常の ZIP ファイルのパスの区切り文字は \ ですが、Excel ファイルの場合は / となっており、注意が必要です。

このプログラムを実行すれば、Media フォルダーに画像ファイルが保存されます。

取得した画像ファイル

この仕組みを使ってバッチ処理化もできるでしょう。
なお、Word や PowerPoint のファイルに対しても、同様の方法で画像ファイルを取り出せるようです。

 

作成したサンプル
ExcelMediaConsole (GitHub)

バージョン情報
.NET Framework 4.5

参照
ZipFile クラス
PowerShellでOpen XML形式のMS Officeに保存された画像ファイルを抽出する
Excel 方眼紙でドット絵を描く
Open XML SDK で Excel シートを読み込む

カテゴリー: .NET Framework. タグ: , , . 1 Comment »

コメント / トラックバック1件 to “Excel ファイルから画像を自動で取り出す”

  1. Open XML SDK で Excel シートを読み込む | Do Design Space Says:

    […] Excel 方眼紙でドット絵を描く Excel ファイルから画像を自動で取り出す […]


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。