namazu-ml(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Excelの取り込み用ヘルパープログラム
- From: Jun Kurabe <jun-krb@xxxxxxxxxxxxxx>
- Date: Tue, 02 Nov 1999 01:31:03 +0900
倉部です。
広瀬さんの一言に調子に乗って、Excelの取り込用Helperを作りました。
まだ、十分テストできていませんが、公開します。
広瀬さんへ
私信で書いた取り込範囲の判定は、属性UsedRangeでわかるようです。
PowerPoint版もあるのですが、TextFrameの切り出しがうまく行かない場合が
見つかりましたので、バグフィックスをしてから公開します。
------------- 以下 私のサンプル --------------
mknmzもWordの場合と同じように2ヶ所変更します。
mknmzを変更したところ
my $TARGET_FILE = '.*\.html?|.*\.txt|.*_default|.*\.doc|.*\.rtf'|.*\.xls
#xlsを追加
my %HELPER_PROGRAMS = (
'gz' => 'zcat',
'Z' => 'zcat',
'man' => 'groff -man -Tnippon',
'doc' => 'perl.exe d:/usr/local/namazu/bin/ReadMSWord.pl', #doc を
追加
'rtf' => 'perl.exe d:/usr/local/namazu/bin/ReadMSWord.pl', #rtfを
追加
'xls => 'perl.exe d:/usr/local/namazu/bin/ReadExcel.pl', #xlsを
追加
);
------------ ReadExcel.pl ---------------------
# Created by Jun Kurabe
# 1999/11/01
use Win32::OLE;
use Win32::OLE::Enum;
package ReadExcel;
sub ReadExcel {
my $fileName = shift;
my $excel;
# Copy From Win32::OLE Sample Program
# use existing instance if Excel is already running
eval {$excel = Win32::OLE->GetActiveObject('Excel.Application')};
die "MSWord not installed" if $@;
unless (defined $excel) {
$excel = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
or die "Oops, cannot start Word";
}
# End of Copy From Win32::OLE Sample Program
# for debug
# $excel->{Visible} = 1;
my $wb = $excel->{Workbooks}->open($fileName);
$allText = '';
$allText .= getProperties($wb);
$allText .= getSheets($wb);
$wb->close(0);
undef $wb;
undef $excel;
return $allText;
}
sub getSheets{
my $wb = shift;
my $e = Win32::OLE::Enum->new($wb->Worksheets);
my $allText = '';
while(($obj = $e->Next)) {
$allText .= getCells($obj);
$allText .= getShapes($obj);
}
return $allText;
}
sub getProperties {
my $wb = shift;
my $allText = '';
# get Title
$title = $wb->BuiltInDocumentProperties(1)->{Value};
$subject = $wb->BuiltInDocumentProperties(2)->{Value};
$author = $wb->BuiltInDocumentProperties(3)->{Value};
$lastAuthor = $wb->BuiltInDocumentProperties(7)->{Value};
$createDate = $wb->BuiltInDocumentProperties(11)->{Value};
$editDate = $wb->BuiltInDocumentProperties(13)->{Value};
$allText .= 'Subject: ' . $title . ' ' . $subjext ;
$allText .= "\n";
$allText .= 'From: ' . $author . ',' . $lastAuthor;
$allText .= "\n";
$allText .= 'Date: ' . $createDate;
$allText .= "\n";
$allText .= "\n";
return $allText;
}
sub getCells {
my $sheet = shift;
my $ur = $sheet->{UsedRange};
my $e_cells = Win32::OLE::Enum->new($ur->Cells);
my $allText = '';
my $cell;
while (($cell = $e_cells->Next)) {
$allText .= $cell->{Value};
$allText .= "\n";
}
return $allText;
}
sub getShapes {
my $sheet = shift;
my $e = Win32::OLE::Enum->new($sheet->Shapes);
my $allText = '';
while(($obj = $e->Next)) {
if ($obj->{Type} == 17 ) { # msoShapeTextBox = 17
$p = $obj->TextFrame->Characters->{Text};
$allText .= $p;
$allText .= "\n";
}
}
return $allText;
}
#main
print ReadExcel::ReadExcel("$ARGV[0]");