【问题标题】:OLE Automation with Perl in 20152015 年使用 Perl 实现 OLE 自动化
【发布时间】:2015-11-09 11:57:37
【问题描述】:

我正在尝试从 Perl 打开一个 Word docx 文件,然后将其保存为 HTML。我获得了 Win7 63 位和 Office 15(Office 365 订阅)。我阅读了一些示例并尝试使用StrawberryActiveState,但我总是遇到错误

perl -MWin32::OLE -e "$wd = Win32::OLE->GetObject('1994.62_01_fnd_en.docx'); print Win32::OLE->LastError"
Win32::OLE(0.1712) error 0x80004005: "Unspecified error"

perl -e "use Win32::OLE::Const('.*Word.*')"
No type library matching ".*Word.*" found at -e line 1.
Win32::OLE(0.1712): GetOleTypeLibObject() Not a Win32::OLE::TypeLib object at C:/Perl64/lib/Win32/OLE/Const.pm line 49.

【问题讨论】:

标签: perl ole


【解决方案1】:

虽然 GetObject 对我不起作用,但 Win32::OLE->new('Word.Application') 起作用了,我能够使用这样的脚本完成这项工作

use Win32::OLE; # http://search.cpan.org/~jdb/Win32-OLE-0.1712/lib/Win32/OLE.pm
use Win32::OLE::Variant; # http://search.cpan.org/~jdb/Win32-OLE-0.1712/lib/Win32/OLE/Variant.pm
use constant true  => Variant->new(VT_BOOL, 'true');
use constant false => Variant->new(VT_BOOL, 'false');

use Cwd;
# use Path::Abstract qw(path); # http://search.cpan.org/~rokr/Path-Abstract-0.096/lib/Path/Abstract.pm#$path->extension
use constant MAX => 1024000; # max file size to open

# https://msdn.microsoft.com/en-us/library/office/ff839952.aspx
use constant wdFormatUnicodeText => 7;
use constant wdFormatFilteredHTML => 10;
# use Win32::OLE::Const '.*Microsoft Word'; # http://search.cpan.org/~jdb/Win32-OLE-0.1712/lib/Win32/OLE/Const.pm
# No type library matching ".*Word" found at -e line 1.
# Win32::OLE(0.1712): GetOleTypeLibObject() Not a Win32::OLE::TypeLib object at C:/Perl64/lib/Win32/OLE/Const.pm line 49.

my $w = Win32::OLE->new('Word.Application');
# https://msdn.microsoft.com/en-us/library/aa171814(v=office.11).aspx
$w->ChangeFileOpenDirectory(cwd);
for my $doc (<doc/*>) {
  next if -s $doc > MAX;
  my $html = $doc; $html =~ s{\bdocx?\b}{html}g;
  my $txt  = $doc; $txt  =~ s{\bdocx?\b}{txt}g;
  # https://msdn.microsoft.com/EN-US/library/office/ff835182.aspx
  $d = $w->Documents->Open ($doc, {ConfirmConversions => false, ReadOnly => true, OpenAndRepair => false, AddToRecentFiles => false, Visible => false});
  # https://msdn.microsoft.com/en-us/library/office/ff836084.aspx
  $d->SaveAs2({FileName => $html, FileFormat => wdFormatFilteredHTML});
  $d->SaveAs2({FileName => $txt,  FileFormat => wdFormatUnicodeText});
  # https://msdn.microsoft.com/EN-US/library/office/ff196343.aspx
  $d->Close;
  last;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2017-01-24
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多