Frage

Ich brauche einen Weg .doc oder .docx Erweiterungen zu konvertieren, ohne .txt etwas zu installieren. Ich möchte auch diese manuell zu öffnen Word nicht haben offensichtlich zu tun. Solange es auf Auto läuft.

Ich dachte, dass entweder Perl oder VBA könnte den Trick tun, aber ich kann nichts mehr online entweder finden.

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Beachten Sie, dass eine ausgezeichnete Informationsquelle für Microsoft Office-Anwendungen ist der Object Browser . Sie können es über Zugang ToolsMacroVisual Basic Editor. Sobald Sie im Editor sind, drücken Sie F2 die Schnittstellen, Methoden und Eigenschaften von Microsoft Office-Anwendungen zur Verfügung gestellt zu sehen.

Hier ist ein Beispiel unter Verwendung von 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__

Andere Tipps

Eine einfache Perl einzige Lösung für docx:

  1. Verwenden Sie Archive :: Zip die word/document.xml Datei erhalten von Ihrem docx Datei. (A docx ist nur ein ZIP-Archiv).

  2. Verwenden Sie XML :: LibXML es zu analysieren.

  3. Dann benutzen XML :: LibXSLT es in Text zu verwandeln oder html-Format. Seach die Bahn einen schönen docx2txt.xsl Datei:)

Cheers!

J.

Für .doc, habe ich einen gewissen Erfolg mit dem Linux-Kommandozeilen-Tool hatte antiword . Es extrahiert den Text aus .doc sehr schnell, eine gute Wiedergabe der Vertiefung geben. Dann können Sie Rohr, das in eine Textdatei in bash.

Für .docx, habe ich das OOXML SDK wie einige andere Benutzer erwähnt verwendet. Es ist nur eine .NET-Bibliothek, um es einfacher mit dem OOXML zu arbeiten, die in einer OOXML-Datei gezippt ist. Es gibt eine Menge von Metadaten, die Sie wollen verwerfen, wenn Sie daran interessiert sind nur in den Text sind. Einige andere Leute geschrieben haben bereits den Code, den ich sehen. DocXToText

Aspose.Words hat eine sehr einfache API mit großer Unterstützung auch ich gefunden habe.

Es gibt auch diesen bash Befehl von commandlinefu.com, die durch Entpacken der .docx funktioniert:

unzip -p some.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'

ich empfehlen AsposeWords wenn Sie Java oder .NET tun können. Es kann konvertieren, ohne Word installiert, zwischen allen wichtigen Textdateitypen.

Wenn Sie einige Unix-Variante installiert haben, können Sie die ‚Strings‘ Dienstprogramm verwenden, um alle lesbaren Zeichenketten aus dem Dokument zu finden und zu extrahieren. Es wird noch einige Chaos vor und nach dem Text, die Sie suchen, aber die Ergebnisse werden lesbar sein.

Beachten Sie, dass Sie auch Openoffice auszuführen verschiedene Dokument verwenden können, zeichnen, spreadhseet usw. Umwandlungen auf beide Windows und * nix-Plattformen.

Sie können Openoffice zugreifen programmatisch (in einer Art und Weise analog zu COM auf Windows) über UNO aus einer Vielzahl von Sprachen, für das ein UNO-Bindung besteht, einschließlich von Perl über die Openoffice :: UNO Modul.

Auf der Openoffice :: UNO Seite wird auch eine Probe Perl scriptlet finden, die ein Dokument öffnet, alles, was Sie dann tun müssen, ist, exportieren Sie es mithilfe der txt Methode document.storeToURL() - siehe ein Python-Beispiel , die leicht angepasst werden kann, um Ihre Perl muss.

.doc ist, dass die Verwendung der WordprocessingML und .docx XML-Format ihre XML die analysiert haben, können abgerufen werden eigentlicher Text des Dokuments. Sie müssen ihre Spezifikationen lesen, welche Tags enthalten lesbaren Text zu verstehen.

Das Verfahren von Sinan Unur funktioniert gut.
Allerdings habe ich einige Abstürze mit den Dateien, die ich war zu verwandeln.

Eine andere Methode ist Win32 :: OLE und Win32 :: Zwischenablage als solche zu verwenden:

  • Öffnen Sie das Word-Dokument
  • Wählen Sie den gesamten Text
  • Kopieren in die Zwischenablage
  • Drucken Sie den Inhalt der Zwischenablage in einer txt-Datei
  • die Zwischenablage leeren und schließen Sie das Word-Dokument

Basierend auf dem Drehbuch gegeben durch Sigvald Refsu in http: // Computer-Programmierung -forum.com/53-perl/c44063de8613483b.htm , kam ich mit dem folgende Skript auf.

Hinweis: Ich wählte die txt-Datei mit dem gleichen Basisnamen wie die DOCX-Datei und im selben Ordner zu speichern, aber dies kann leicht geändert werden

########################################### 
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; 
}

Hoffe, es kann Ihnen hilft.

Sie können es in VBA nicht tun, wenn Sie Word (oder einem anderen Office-Anwendung) nicht gestartet werden soll. Auch wenn Sie VB gemeint, würde man immer noch eine (versteckte) Instanz von Word starten muß, um die Verarbeitung zu tun.

  

ich brauche einen Weg, .doc oder .docx-Erweiterungen konvertieren .txt alles ohne Installation

for I in *.doc?; do mv $I `echo $ | sed 's/\.docx?/\.txt'`; done

Nur ein Scherz.

könnten Sie antiword für die älteren Versionen von Word-Dokumenten, und versuchen, die XML von den neuen zu analysieren.

Mit docxtemplater , können Sie einfach den vollständigen Text eines Wortes erhalten (funktioniert mit docx nur).

Hier ist der Code (Node.JS)

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

Dies ist nur drei Zeilen Code und hängt nicht von jedem Wort Instanz (alle Ebene JS)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top