У меня есть несколько сценариев для преобразования DOC в различные выходные форматы, используя Win32 :: OLE .Обычно они начинаются так:
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Word';
my $wr = Win32::OLE->new('Word.Application')
or die "Failure - word. \n";
$wr->{DisplayAlerts} = wdAlertsNone;
$wr->{Visible} = 0;
my $Doc = $wr->Documents->Open({
FileName => $input_file_path,
ConfirmConversions => 0,
AddToRecentFiles => 0,
Revert => 0,
ReadOnly => 1,
OpenAndRepair => 0,
}) or exit;
...
Обратите внимание, что $input_file_path
должен содержать абсолютный путь к вашему файлу.Вы также можете включить Visible
и DisplayAlerts
, чтобы увидеть любую ошибку, которую может выдать Word.
Редактировать: Вы можете просматривать абзацы, используя перечислитель in
:
use Win32::OLE qw(in);
...
my $paragraphs = $Doc->Paragraphs;
for my $par (in $paragraphs) {
print $par->Range->Text();
}
Или вы можете использовать собственный метод экспорта Word и сохранить документ в качестве одного из поддерживаемых форматов:
$Doc->SaveAs({
FileName => 'c:\\work\\Test.txt',
FileFormat => wdFormatEncodedText,
});
Преимущество последнего метода заключается в том, что форматирование сохраняется, если это возможно, что дает лучшие результаты для маркеров, нумерациии такие.