Konwertować pliki Word DOC lub docx na pliki tekstowe?

Potrzebuję sposobu na konwersję .doc LUB .docx rozszerzeń na .txt bez instalowania czegokolwiek. Nie chcę również ręcznie otwierać programu Word, aby to oczywiście zrobić. Tak długo, jak działa na auto.

Myślałem, że albo Perl, albo VBA mogą zrobić sztuczkę, ale nie mogę znaleźć nic w Internecie dla obu.

Jakieś sugestie?
Author: edi9999, 2009-07-10

11 answers

Zauważ, że doskonałym źródłem informacji dla aplikacji Microsoft Office jest Object Browser . Można uzyskać do niego dostęp poprzez ToolsMacroVisual Basic Editor. Gdy znajdziesz się w edytorze, Naciśnij F2 , aby przejrzeć interfejsy, metody i właściwości dostarczane przez aplikacje pakietu Microsoft Office.

Oto przykład użycia Win32:: OLE :

#!/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__
 9
Author: Sinan Ünür,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 16:36:55

Proste rozwiązanie tylko dla Perla dla docx:

  1. Użyj Archive:: Zip , aby pobrać plik word/document.xml z pliku docx. (Docx to po prostu spakowane archiwum.)

  2. Użyj XML:: LibXML , aby go przeanalizować.

  3. Następnie użyj XML::LibXSLT, aby przekształcić go w format tekstowy lub html. Wejdź do sieci, aby znaleźć ładny docx2txt.plik xsl :)

Zdrówko !

J.

 12
Author: jeje,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 17:35:00

Zdecydowanie polecam AsposeWords jeśli możesz zrobić Java lub. NET. może on konwertować, bez zainstalowanego programu Word, między wszystkimi głównymi typami plików tekstowych.

 4
Author: Jim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 16:10:04

Jeśli masz zainstalowany jakiś smak Uniksa, możesz użyć narzędzia 'strings', aby znaleźć i wyodrębnić wszystkie czytelne ciągi znaków z dokumentu. Będzie trochę bałaganu przed i po tekście, którego szukasz, ale wyniki będą czytelne.

 4
Author: Ether,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 17:11:53

Dla .doc, odniosłem sukces z linuksowym narzędziem wiersza poleceń antiword . Wydobywa tekst z .doc bardzo szybko, daje dobre renderowanie wcięć. Następnie możesz przesłać to do pliku tekstowego w bash.

Dla .docx, używałem OOXML SDK, jak wspominali inni użytkownicy. Jest to po prostu biblioteka. NET, aby ułatwić pracę z OOXML, który jest spakowany w pliku OOXML. Istnieje wiele metadanych, które chcesz odrzucić, jeśli jesteś zainteresowany tylko tekst. Niektórzy już napisali kod, który widzę: DocXToText .

Aspose.Words ma bardzo prosty API z wielkim wsparciem też znalazłem.

Istnieje również polecenie bash z commandlinefu.com który działa poprzez rozpakowanie .docx:

unzip -p some.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'
 4
Author: Nick A Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-31 13:12:29

Zauważ, że możesz również użyć OpenOffice do wykonywania różnych dokumentów, rysunków, arkuszy kalkulacyjnych itp. konwersje na platformach Windows i * nix.

Możesz uzyskać dostęp do OpenOffice programowo (w sposób analogiczny do COM w systemie Windows) poprzez UNO z różnych języków, dla których istnieje powiązanie UNO, w tym z Perla poprzez moduł OpenOffice::uno .

Na stronie OpenOffice::UNO znajdziesz również przykładowy skrypt Perla, który otwiera dokument, wszystko, co musisz zrobić, to wyeksportować go do txt za pomocą metody document.storeToURL() -- Zobacz przykład Pythona, który można łatwo dostosować do potrzeb Perla.

 2
Author: vladr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-27 14:12:39

.doc używa WordprocessingML i .format XML docx może być przetwarzany w formacie XML, aby pobrać rzeczywisty tekst dokumentu. Musisz przeczytać ich specyfikacje, aby dowiedzieć się, które znaczniki zawierają czytelny tekst.

 1
Author: AlbertoPL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 15:54:36

Metoda Sinan Ür działa dobrze.
Jednak dostałem trochę awarii z plikami, które przetwarzałem.

Inną metodą jest użycie Win32:: OLE i Win32::Clipboard jako takich:

  • otwórz dokument Word
  • Zaznacz cały tekst
  • Skopiuj do schowka
  • wyświetla zawartość Schowka w pliku txt
  • Opróżnij schowek i zamknij dokument programu Word

Na podstawie skryptu podanego przez Sigvalda Refsu w http://computer-programming-forum.com/53-perl/c44063de8613483b.htm , wymyśliłem następujący scenariusz.

Uwaga: zdecydowałem się zapisać plik txt o tej samej nazwie bazowej co .plik docx i w tym samym folderze, ale można to łatwo zmienić

########################################### 
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; 
}
Mam nadzieję, że ci pomoże.
 1
Author: Jean-Francois T.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 11:21:05

Nie możesz tego zrobić w VBA, jeśli nie chcesz uruchamiać Worda (lub innej aplikacji biurowej). Nawet jeśli masz na myśli VB, nadal musisz uruchomić (ukrytą) instancję programu Word, aby wykonać przetwarzanie.

 0
Author: Gary McGill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 15:56:05
Potrzebuję sposobu na nawrócenie .doc or .docx extensions to .txt bez instalowania czegokolwiek
for I in *.doc?; do mv $I `echo $ | sed 's/\.docx?/\.txt'`; done
Żartowałem.

Możesz użyć antiword dla starszych wersji dokumentów programu Word i spróbować przeanalizować xml nowych.

 0
Author: fortran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-11 00:21:27

Z docxtemplater , można łatwo uzyskać pełny tekst słowa(działa tylko z docx).

Oto kod (Node.JS)

DocxTemplater=require('docxtemplater');
doc=new DocxTemplater().loadFromFile("input.docx");
result=doc.getFullText();

To tylko trzy linie kodu i nie zależy od żadnej instancji słowa (wszystkie zwykłe JS)

 0
Author: edi9999,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-22 14:22:24