Question

J'ai besoin d'un moyen de convertir les extensions de .doc ou .docx à .txt sans installer quoi que ce soit. Je ne veux pas aussi avoir à ouvrir Word manuellement pour le faire évidemment. Tant qu'il est en cours d'exécution sur l'auto.

Je pensais que soit Perl ou VBA pourrait faire l'affaire, mais je ne peux pas trouver quoi que ce soit en ligne soit.

Toutes les suggestions?

Autres conseils

Pour .doc, j'ai eu un certain succès avec l'outil de ligne de commande linux antiword . Il extrait le texte de .doc très rapidement, ce qui donne un bon rendu de l'empreinte. Ensuite, vous pouvez tuyau à un fichier texte dans bash.

Pour .docx, je l'ai utilisé le SDK OOXML que d'autres utilisateurs mentionnés. Il est juste une bibliothèque .NET pour le rendre plus facile de travailler avec l'OOXML qui est compressé dans un fichier OOXML. Il y a beaucoup de métadonnées que vous voulez jeter si vous ne souhaitez que le texte. D'autres personnes ont déjà écrit le code que je vois. DocXToText

Aspose.Words a une API très simple avec un grand soutien aussi je l'ai trouvé.

Il y a aussi cette commande bash de commandlinefu.com qui fonctionne en décompressant le .docx:

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

Je recommande fortement AsposeWords si vous pouvez le faire Java ou .NET. Il peut convertir, sans Word est installé, entre tous les principaux types de fichiers texte.

Si vous avez un peu de saveur de unix installé, vous pouvez utiliser l'utilitaire « chaînes » pour trouver et extraire toutes les chaînes lisibles à partir du document. Il y aura un certain désordre avant et après le texte que vous recherchez, mais les résultats seront lisibles.

Notez que vous pouvez également utiliser OpenOffice pour effectuer divers documents, dessin, etc. spreadhseet conversions sur les deux plateformes windows et * nix.

Vous pouvez accéder à OpenOffice programme (d'une manière analogue à COM sous Windows) via ONU à partir d'une variété de langues pour lesquelles il existe une liaison de l'ONU, y compris de Perl via le OpenOffice :: Module ONU .

OpenOffice :: page ONU trouveront également un échantillon Perl qui ouvre scriptlet un document, il suffit alors de faire est de l'exporter vers txt en utilisant la méthode document.storeToURL() - voir un exemple Python qui peut être facilement adapté à votre Perl besoins.

.doc de qu'utiliser l' WordprocessingML et format XML de .docx peuvent avoir leur XML analysé pour récupérer le texte du document. Vous devrez lire leurs spécifications pour savoir quelles balises contiennent du texte lisible.

La méthode de Sinan Unur fonctionne bien.
Cependant, je suis un peu plantage avec les fichiers que je transformait.

Une autre méthode consiste à utiliser Win32 :: OLE et Win32 :: Presse-papiers en tant que tels:

  • Ouvrez le document Word
  • Sélectionner tout le texte
  • Copier dans le Presse-papiers
  • Imprimer le contenu du Presse-papiers dans un fichier txt
  • Vider le Presse-papiers et fermez le document Word

Basé sur le script donné par Sigvald Refsu dans http: // programmation informatique -forum.com/53-perl/c44063de8613483b.htm , je suis venu avec le script suivant.

Remarque: j'ai choisi d'enregistrer le fichier txt avec le même nom de base que le fichier .docx et dans le même dossier, mais cela peut facilement être changé

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

espère que cela peut vous aide.

Vous ne pouvez pas le faire en VBA si vous ne voulez pas démarrer Word (ou une autre application Office). Même si vous vouliez dire VB, vous auriez encore démarrer une instance de Word (caché) pour effectuer le traitement.

  

J'ai besoin d'un moyen de convertir les extensions .doc ou .docx Txt sans rien installer

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

Je plaisante.

Vous pouvez utiliser antiword pour les anciennes versions de documents Word, et essayer d'analyser le xml des nouvelles.

docxtemplater , vous pouvez facilement obtenir le texte intégral d'un mot (fonctionne avec docx seulement).

Voici le code (Node.JS)

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

Ceci est seulement trois lignes de code et ne dépend pas d'une instance de mot (tout JS plaine)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top