2006-08-24
■[Perl][Tips] はじめてのWin32::OLE(word2txt.vbsをperlに移植してみた)
PerlのWin32::OLEを使って、word2txt.vbs を Perl に移植してみた。
これまで、Win32::OLE を使ったことがなかったので、WordやExcelのファイルをバッチ処理したいときは、いったんテキストに変換してPerlで処理していた。VBAは生産性が低いのであまりすきじゃない。
WordやExcelのファイルをテキストに落とすときには、ここのexcel2txt.vbsやword2txt.vbsにお世話になっていたのだが、PerlからOLEを使えばいいじゃんといういうことにようやく気づいた。
このあたり(PerlからのOLE使用法)の情報を参考に word2txt.vbs を perl に移植してみた。ドラッグしたファイルを対象にするのではなく、カレントディレクトリの全docファイルを処理対象にしている。
#!/usr/bin/perl
use strict;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Word';
use Cwd;
# ワークディレクトリにカレントディレクトリを設定
my $wd = Cwd::getcwd()."/";
print STDERR "$wd\n";
# ワードファイルをテキスト形式で保存
while(my $filename = <*.doc>){
# ファイル名から拡張子を削除
$filename =~ s/\.doc$//;
print STDERR "$filename.txt -> $filename.txt\n";
my $Word = Win32::OLE->new('Word.Application', 'Quit');
$Word->Documents->Open($wd."$filename.doc")
|| die("Unable to open document ", Win32::OLE->LastError());
$Word->ActiveDocument->SaveAs($wd."$filename.txt", 2);
$Word->Documents->Close;
}
基本的には、PerlからのOLE使用法にあるとおり、VBAのコードを以下のように変換するだけ。簡単。もっと早く気づいていればよかった。
VBA(Visual Basic for Applications)では、文法は以下のようになっています。:
object.method(argument).property = value
Perlでは、以下のようになります。
object->method(argument)->{property} = value;
つまり、次のVBAのサンプルコードは:
ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlCategoryScale
Perlでは以下のようになります。:
$Chart->Axes(xlCategory, xlPrimary)->{CategoryType} = xlCategoryScale;
参考URL
- perlwin32faq12 - PerlからのOLE使用法
http://www.att.or.jp/perl/faq/perlwin32faq/perlwin32faq12j.html - Win32::OLEモジュール
http://homepage3.nifty.com/hippo2000/perltips/Win32/OLE.htm
ちなみに、RubyのWin32OLEについては Rubyist Magazine に詳細な解説がある。
言語を問わず参考になる。
- Win32OLE 活用法 【第 1 回】 Win32OLE ことはじめ
http://jp.rubyist.net/magazine/?0003-Win32OLE - Win32OLE 活用法 【第 2 回】 Excel
http://jp.rubyist.net/magazine/?0004-Win32OLE
トラックバック - http://d.hatena.ne.jp/jun-yoshida/20060824/1156431589
リンク元
- 4 http://g.1o4.jp/ig.html
- 2 http://gmail.1o4.jp/mobile.html
- 1 http://72.14.235.104/search?q=cache:VQS_HwN8JPkJ:b.hatena.ne.jp/keyword/HTTPS+gmail+ssl+extension&hl=ja&gl=jp&ct=clnk&cd=7
- 1 http://b.hatena.ne.jp/entry/http://q.hatena.ne.jp/1156318046
- 1 http://b.hatena.ne.jp/qjn/
- 1 http://b.hatena.ne.jp/t/css?sort=eid
- 1 http://d.hatena.ne.jp/keyword/サザエさん
- 1 http://d.hatena.ne.jp/keyworddiary/Ruby
- 1 http://gmail.1o4.jp/firefox.html
- 1 http://www.google.co.jp/search?hl=ja&q=GTDな&lr=