unoh.github.com

JavaでPowerPointファイルを読み込む

Wed Mar 26 19:59:02 -0700 2008

こんにちは。中村です。

JavaからMicrosoft Officeのファイルを読み書きするのには、100%Javaで実装されているApache POIを利用することができます。

昔はPowerPointファイルを読み書きするAPI群であるHSLFはなかったので、POIで検索するとEXCELファイルを読み書きするHSSFが中心に紹介されているようです。

今回はHSLFを使ってPowerPointファイルの中にある文字列を出力する簡単なサンプルを書いてみました。

package net.unoh.ppt2text;

import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.Shape;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.TextBox;
import org.apache.poi.hslf.usermodel.SlideShow;

public class PPT2Text {

    public static void main(String[] args) {

        if (args.length != 1) {
            printUsage();
            System.exit(1);
        }

        try {

            SlideShow slideShow = new SlideShow(new HSLFSlideShow(args[0]));
            Slide[] slides = slideShow.getSlides();

            for (int i = 0; i < slides.length; i++) {

                Shape[] shapes = slides[i].getShapes();

                for (int j = 0; j < shapes.length; j++) {

                    if (shapes[j] instanceof TextBox) {
                        TextBox shape = (TextBox)shapes[j];
                        String text = shape.getText();
                        if (text != null) {
                            System.out.println(text);
                        }
                    }

                }
            
            }

        } catch (FileNotFoundException e) {
            System.err.println("File not found");
        } catch (IOException e) {
            System.err.println("IO error");
        }

    }
    
    public static void printUsage() {
        System.out.println("Usage: ppt2text filename");
    }

}

POIのクラスファイルをダウンロードページから取得してビルドしています。

これで例えばLinuxのコンソール上からPowerPointファイルを読むというニッチなことも、以下のようにjarファイルを実行するだけで可能です。

ppt2text
ppt2text posted by (C)フォト蔵

Busy Developers' Guide to HSLF drawing layerにサンプルコードがまとまっていて参考になります。

Microsoft Officeのファイルを扱う実装はJava以外にもありますが、POIも良い選択肢の一つになるのではないでしょうか。