Pregunta

Necesito una manera de convertir .doc o .docx extensiones a .txt sin necesidad de instalar nada. Asimismo, no quiero tener que abrir Word manualmente para hacer esto obviamente. Mientras se está ejecutando en el automóvil.

Estaba pensando que, o bien Perl o VBA podrían hacer el truco, pero no puedo encontrar nada en línea para cualquiera.

¿Alguna sugerencia?

¿Fue útil?

Solución

Tenga en cuenta que una excelente fuente de información para las aplicaciones de Microsoft Office es el Examinador de objetos . Puede acceder a ella a través de Tools → → Macro Visual Basic Editor. Una vez que esté en el editor, presione F2 para explorar las interfaces, métodos y propiedades que proporcionan las aplicaciones de Microsoft Office.

Aquí está un ejemplo utilizando 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__

Otros consejos

Un simple Perl única solución para docx:

  1. Archive :: Zip para obtener el archivo de su word/document.xml docx archivo. (A docx es sólo un archivo comprimido.)

  2. XML :: LibXML para analizarlo.

  3. A continuación, utilice XML :: libxslt para transformarlo en texto o formato html. Seach la web para encontrar un buen archivo docx2txt.xsl :)

Saludos!

J.

Para .doc, he tenido cierto éxito con la herramienta de línea de comandos de Linux antiword . Extrae el texto desde .doc muy rápidamente, dando una buena prestación de sangría. A continuación, se puede canalizar a que un archivo de texto en bash.

Para .docx, he utilizado el SDK OOXML como algunos otros usuarios mencionados. Es sólo una biblioteca .NET para que sea más fácil trabajar con el OOXML que se subió la cremallera en un archivo OOXML. Hay una gran cantidad de metadatos que tendrá que desechar si usted está interesado sólo en el texto. Algunas otras personas ya han escrito el código que veo:. DocXToText

Aspose.Words tiene una API muy simple con un gran apoyo también he encontrado.

También existe este comando bash commandlinefu.com que funciona mediante descomprimir el .docx:

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

recomiendo encarecidamente AsposeWords si se puede hacer Java o .NET. Puede convertir, sin instalado Word, entre los principales tipos de archivos de texto.

Si usted tiene un cierto sabor de Unix instalado, puede utilizar la utilidad 'cuerdas' para encontrar y extraer todas las cadenas legibles desde el documento. Habrá algún desastre antes y después del texto que busca, pero los resultados serán legibles.

Tenga en cuenta que también puede usar OpenOffice para llevar a cabo documento misceláneo, dibujo, etc. spreadhseet conversiones en tanto windows y plataformas * nix.

Puede acceder a OpenOffice mediante programación (de una manera análoga a COM en Windows) a través de UNO a partir de una variedad de idiomas para los que existe una unión UNO, incluyendo de Perl a través de la OpenOffice UNO :: módulo.

En el OpenOffice :: página UNO se también se encuentra una muestra de Perl scriplet que se abre un documento, entonces todo lo que necesita hacer es exportarlo a txt utilizando el método document.storeToURL() - vea un ejemplo Python que se puede adaptar fácilmente a su Perl las necesidades.

.doc de que utilice el WordprocessingML y de .docx formato XML se han analizado su XML para recuperar la el texto real del documento. Vas a tener que leer sus especificaciones de averiguar qué etiquetas contiene texto legible.

El método de Sinan Unur funciona bien.
Sin embargo, tengo algo de accidente con los archivos que estaba transformando.

Otro método es utilizar Win32 :: OLE y Win32 :: portapapeles como tal:

  • Abra el documento de Word
  • Seleccionar todo el texto
  • Copiar en el portapapeles
  • Imprimir el contenido del portapapeles en un archivo txt
  • vaciar el Portapapeles y cierre el documento de Word

Sobre la base de la secuencia de comandos dada por Sigvald Refsu en http: // equipo de programación -forum.com/53-perl/c44063de8613483b.htm , me ocurrió con la siguiente secuencia de comandos.

Nota: he elegido para guardar el archivo txt con el mismo nombre base que el archivo .docx y en la misma carpeta, pero esto se puede cambiar fácilmente

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

esperan que los pueda le ayuda.

No se puede hacerlo en VBA si no desea iniciar Word (u otra aplicación de Office). Incluso si nos referimos VB, todavía tendría que iniciar una instancia de Word (oculto) para hacer el procesamiento.

  

Necesito una manera de convertir .doc o .docx extensiones a .txt sin instalar nada

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

Sólo bromeando.

Se puede usar antiword para las versiones anteriores de los documentos de Word, y tratar de analizar el código XML de los nuevos.

docxtemplater , usted puede conseguir fácilmente el texto completo de una palabra (funciona con docx solamente).

Aquí está el código (Node.JS)

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

Esto es sólo tres líneas de código y no depende de ninguna instancia palabra (todo llano JS)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top