Convertire file Word doc o docx in file di testo?
-
12-09-2019 - |
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?
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:
-
Archive :: Zip per ottenere il file dal vostro
word/document.xml
file didocx
. (A docx è solo un archivio zippato.) -
XML :: LibXML per analizzarlo.
-
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)