Domanda

Ho bisogno di un modo per convertirmi .doc O .docx estensioni a .txt senza installare nulla.Inoltre, non voglio dover aprire manualmente Word per farlo, ovviamente.Finché funziona in modalità automatica.

Stavo pensando che Perl o VBA potrebbero fare il trucco, ma non riesco a trovare nulla online per nessuno dei due.

Eventuali suggerimenti?

È stato utile?

Soluzione

Si noti che un'ottima fonte di informazioni per le applicazioni di Microsoft Office è il Browser oggetto . È possibile accedervi tramite Tools → → Macro Visual Basic Editor. Una volta che siete nell'editor, premi F2 per visualizza le interfacce, metodi e proprietà fornite dalle applicazioni di Microsoft Office.

Ecco un esempio utilizzando 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__

Altri suggerimenti

Una semplice Perl unica soluzione per i docx:

  1. Archive :: Zip per ottenere il file dal vostro word/document.xml file di docx. (A docx è solo un archivio zippato.)

  2. XML :: LibXML per analizzarlo.

  3. Quindi utilizzare XML :: LibXSLT per trasformarlo in testo o formato html. Seach il web per trovare un bel file docx2txt.xsl :)

Cheers!

J.

Per .doc, ho avuto un certo successo con lo strumento da riga di comando di Linux antiword . Estrae il testo da .doc molto velocemente, dando una buona resa di rientro. Quindi è possibile reindirizzare che un file di testo in bash.

Per .docx, ho usato lo SDK OOXML come alcuni altri utenti menzionati. E 'solo una libreria .NET per rendere più facile lavorare con l'OOXML che viene compresso in un file OOXML. C'è un sacco di metadati che si desidera eliminare, se siete interessati solo nel testo. Alcune altre persone hanno già scritto il codice che vedo:. DocXToText

Aspose.Words ha una semplice API con grande supporto anche che ho trovato.

C'è anche questo comando bash da commandlinefu.com che funziona decompresso il .docx:

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

Consiglio vivamente AsposeWords se si può fare Java o .NET. E 'possibile convertire, senza installato Word, tra tutti i principali tipi di file di testo.

Se si dispone di un certo sapore di Unix installato, è possibile utilizzare l'utilità 'stringhe' per trovare ed estrarre tutte le stringhe leggibili dal documento. Ci sarà qualche pasticcio prima e dopo il testo che si sta cercando, ma i risultati saranno leggibili.

Si noti che è possibile utilizzare anche OpenOffice per eseguire documento vario, disegno, per fogli di calcolo, ecc conversioni su entrambi i Windows e * nix piattaforme.

È possibile accedere a OpenOffice di programmazione (in modo analogo a COM su Windows) tramite UNO da una varietà di lingue per le quali esiste un uNO vincolante, anche da Perl tramite il OpenOffice :: UNO modulo.

Al OpenOffice :: pagina UNO si troverete anche un campione Perl scriptlet che si apre un documento, tutto ciò che poi dovete fare è esportarlo in txt utilizzando il metodo document.storeToURL() - vedere un esempio Python che può essere facilmente adattato al Perl ha bisogno.

.doc di che utilizzare la WordprocessingML e di docx formato XML possono avere i loro XML analizzato per recuperare il testo del documento. Dovrete leggere le loro specifiche per capire quali tag contengono il testo leggibile.

Il metodo di Sinan Ünür funziona bene.
Tuttavia, si sono verificati arresti anomali con i file che stavo trasformando.

Un altro metodo consiste nell'utilizzare Win32::OLE e Win32::Clipboard in quanto tali:

  • Apri il documento di Word
  • Seleziona tutto il testo
  • Copia negli Appunti
  • Stampa il contenuto degli Appunti in un file txt
  • Svuota gli Appunti e chiudi il documento di Word

Basato sulla sceneggiatura fornita da Sigvald Refsu in http://computer-programming-forum.com/53-perl/c44063de8613483b.htm, ho creato il seguente script.

Nota:Ho scelto di salvare il file txt con lo stesso nome base del file .docx e nella stessa cartella ma questo può essere facilmente modificato

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

Spero che possa aiutarti.

Non si può farlo in VBA se non si desidera avviare Word (o un'altra applicazione di Office). Anche se si intende VB, che ci devono ancora avviare un'istanza (nascosto) di Word per eseguire l'elaborazione.

  

Ho bisogno di un modo per convertire .doc o .docx estensioni a .txt senza installare nulla

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

Basta scherzare.

Si potrebbe usare antiword per le versioni precedenti di documenti di Word, e cercare di analizzare il codice XML di quelli nuovi.

docxtemplater , si può facilmente ottenere il testo completo di una parola (funziona con DOCX solo).

Ecco il codice (Node.JS)

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

Questo è solo tre linee di codice e non dipende da qualsiasi istanza parola (tutto normale JS)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top