Конвертировать Word doc или docx файлы в текстовые файлы?
мне нужен способ, чтобы преобразовать .doc
или .docx
расширения .txt
ничего не устанавливая. Я также не хочу вручную открывать Word, чтобы сделать это очевидно. Пока он работает на авто.
Я думал, что Perl или VBA могут сделать трюк, но я не могу найти ничего в интернете для обоих.
какие предложения?
11 ответов
обратите внимание, что отличным источником информации для приложений Microsoft Office является Обозреватель Объектов!--6-->. Вы можете получить доступ к нему через Tools
→ Macro
→ Visual Basic Editor
. После того, как вы находитесь в Редакторе, нажмите F2 для просмотра интерфейсов, методов и свойств, предоставляемых приложениями Microsoft Office.
пример использования С Win32::Оле:
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions qw( catfile );
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;
my $word = get_word();
$word->{Visible} = 0;
my $doc = $word->{Documents}->Open(catfile $ENV{TEMP}, 'test.docx');
$doc->SaveAs(
catfile($ENV{TEMP}, 'test.txt'),
wdFormatTextLineBreaks
);
$doc->Close(0);
sub get_word {
my $word;
eval {
$word = Win32::OLE->GetActiveObject('Word.Application');
};
die "$@\n" if $@;
unless(defined $word) {
$word = Win32::OLE->new('Word.Application', sub { $_[0]->Quit })
or die "Oops, cannot start Word: ",
Win32::OLE->LastError, "\n";
}
return $word;
}
__END__
простое решение Perl только для docx:
использовать Архив:: Zip для получения из своего . (А docx это просто zip-архив.)
использовать в xml::в libxml распарсить.
затем использовать XML:: LibXSLT чтобы преобразовать его в текстовый или html-формат. Поиск в интернете, чтобы найти хороший docx2txt.язык xsl :)
Ура !
Ж.
Я настоятельно рекомендую AsposeWords Если вы можете сделать Java или .Сеть. Он может конвертировать без установки Word между всеми основными типами текстовых файлов.
Если у вас установлен Unix, вы можете использовать утилиту "strings" для поиска и извлечения всех читаемых строк из документа. Будет некоторый беспорядок до и после текста, который вы ищете, но результаты будут читаемыми.
For .док, у меня был некоторый успех с инструментом командной строки linux антислово. Он извлекает текст из .док очень быстро, давая хороший перевод отступа. Затем вы можете передать это в текстовый файл в bash.
For .docx, я использовал OOXML SDK, как упоминали некоторые другие пользователи. Это просто библиотека .NET, чтобы упростить работу с OOXML, который заархивирован в файле OOXML. Существует много метаданных, которые вы захотите отбросить, если вы только интересуюсь текстом. Некоторые другие люди уже написали код, который я вижу: DocXToText.
Aspose.Слова имеет очень простой API с большой поддержкой тоже я нашел.
существует также эта команда bash от commandlinefu.com который работает, расстегивая молнию .файлы DOCX:
unzip -p some.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'
обратите внимание, что вы также можете использовать OpenOffice выполнить разное документа, электронных таблиц и т. д. конверсии на платформах Windows и *nix.
вы можете получить доступ к OpenOffice программно (аналогично COM В Windows) через UNO из различных языков, для которых существует привязка UNO, в том числе из Perl через OpenOffice:: UNO модуль.
на OpenOffice:: UNO страница вы также найдите образец Скриптлета Perl, который открывает документ, все, что вам нужно сделать, это экспортировать его в txt
с помощью document.storeToURL()
метод -- см. пример Python который можно легко приспособиться к вашим потребностям Perl.
.док, который использует WordprocessingML и .формат docx в формат XML может иметь их XML парсится для извлечения текста документа. Вам нужно будет прочитать их спецификации, чтобы выяснить, какие теги содержат читаемый текст.
метод Sinan Ünür работает хорошо.
Тем не менее, я получил некоторый сбой с файлами, которые я преобразовывал.
другой метод заключается в использовании Win32::OLE и Win32:: Clipboard как таковой:
- откройте документ Word
- выделить весь текст
- копировать в буфер обмена
- печать содержимого буфера обмена в txt-файле
- очистить буфер обмена и закройте документ Word
на основе заданного скрипта Сигвальд Рефсу в http://computer-programming-forum.com/53-perl/c44063de8613483b.htm, я придумал следующий сценарий.
Примечание: я решил сохранить txt-файл с тем же базовым именем, что и .docx файл и в той же папке, но это можно легко изменить
###########################################
use strict;
use File::Spec::Functions qw( catfile );
use FindBin '$Bin';
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Word';
use Win32::Clipboard;
my $monitor_word=0; #set 1 to watch MS Word being opened and closed
sub docx2txt {
##Note: the path shall be in the form "C:\dir\ with\ space\file.docx";
my $docx_file=shift;
#MS Word object
my $Word = Win32::OLE->new('Word.Application', 'Quit') or die "Couldn't run Word";
#Monitor what happens in MS Word
$Word->{Visible} = 1 if $monitor_word;
#Open file
my $Doc = $Word->Documents->Open($docx_file);
with ($Doc, ShowRevisions => 0); #Turn of revision marks
#Select the complete document
$Doc->Select();
my $Range = $Word->Selection();
with ($Range, ExtendMode => 1);
$Range->SelectAll();
#Copy selection to clipboard
$Range->Copy();
#Create txt file
my $txt_file=$docx_file;
$txt_file =~ s/\.docx$/.txt/;
open(TextFile,">$txt_file") or die "Error while trying to write in $txt_file (!$)";
printf TextFile ("%s\n", Win32::Clipboard::Get());
close TextFile;
#Empty the Clipboard (to prevent warning about "huge amount of data in clipboard")
Win32::Clipboard::Set("");
#Close Word file without saving
$Doc->Close({SaveChanges => wdDoNotSaveChanges});
# Disconnect OLE
undef $Word;
}
надеюсь, что это поможет вам.
вы не можете сделать это в VBA, если вы не хотите запускать Word (или другое приложение Office). Даже если вы имели в виду VB, вам все равно придется запустить (скрытый) экземпляр Word для обработки.
мне нужен способ, чтобы преобразовать .doc или .файлы DOCX расширения .txt без установки чего-либо
for I in *.doc?; do mv $I `echo $ | sed 's/\.docx?/\.txt'`; done
шучу.
можно использовать антислово для более старых версий документов Word и попробуйте проанализировать xml новых.
С docxtemplater, вы можете легко получить полный текст Слова (работает только с docx).
вот код (узел.В JS)
DocxTemplater=require('docxtemplater');
doc=new DocxTemplater().loadFromFile("input.docx");
result=doc.getFullText();
Это всего лишь три строки кода и не зависит от какого-либо экземпляра слова (все простые JS)