Pergunta

Eu preciso de uma maneira de converter .doc ou .docx extensões para .txt sem instalar nada. Eu também não quero ter que abrir manualmente Word para fazer isso, obviamente. Enquanto ele está sendo executado em auto.

Eu estava pensando que ou Perl ou VBA poderia fazer o truque, mas eu não consigo encontrar nada on-line para qualquer um.

Todas as sugestões?

Foi útil?

Solução

Note que uma excelente fonte de informação para aplicações do Microsoft Office é a Navegador de Objetos . Você pode acessá-lo através Tools ? Macro ? Visual Basic Editor. Uma vez que você estiver no editor, bateu F2 para percorrer as interfaces, métodos e propriedades fornecidas por aplicativos do Microsoft Office.

Aqui está um exemplo usando 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__

Outras dicas

A única solução simples Perl para docx:

  1. Use Arquivo :: Zip para obter o arquivo word/document.xml do seu arquivo docx. (A docx é apenas um arquivo zipado.)

  2. Use XML :: LibXML para analisá-lo.

  3. Em seguida, use XML :: libxslt para transformá-lo em texto ou formato html. Da pesquisa na web para encontrar uma boa docx2txt.xsl arquivo:)

Felicidades!

J.

Para .doc, eu tive algum sucesso com a ferramenta de linha de comando do Linux antiword . Ele extrai o texto da .doc muito rapidamente, dando uma boa prestação de recuo. Então você pode canalizar isso para um arquivo de texto em bash.

Para .docx, eu usei o SDK OOXML como alguns outros usuários mencionados. É apenas uma biblioteca .NET para torná-lo mais fácil de trabalhar com o OOXML que está enrolado em um arquivo OOXML. Existe uma grande quantidade de metadados que você deseja descartar Se você está interessado apenas no texto. Algumas outras pessoas já escrevi o código que eu vejo:. DocXToText

Aspose.Words tem uma API muito simples, com grande apoio também eu encontrei.

Há também este comando bash commandlinefu.com que funciona por descompactar o .docx:

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

Eu recomendo fortemente AsposeWords se você pode fazer Java ou .NET. Ele pode converter, sem o Word instalado, entre todos os principais tipos de arquivo de texto.

Se você tem algum sabor de UNIX instalado, você pode usar o utilitário 'cordas' para encontrar e extrair todas as strings legível do documento. Haverá alguma confusão antes e depois do texto que você está procurando, mas os resultados serão legível.

Note que você também pode usar OpenOffice para executar documento miscelânea, desenho, spreadhseet etc. conversões em ambos nix Windows e *.

Você pode acessar OpenOffice programaticamente (em uma análoga maneira de COM no Windows) via UNO a partir de uma variedade de idiomas para os quais ligam a ONU existe, inclusive do Perl através do OpenOffice :: UNO módulo.

Na página OpenOffice :: UNO você também vai encontrar uma amostra Perl scriptlet que abre um documento, tudo o que você precisa então de fazer é exportá-lo para txt usando o método document.storeToURL() - veja um exemplo Python que pode ser facilmente adaptado ao seu Perl necessidades.

O .doc que usam o WordprocessingML .docx formato XML podem ter seu XML analisado para recuperar o texto do documento. Você vai ter que ler as suas especificações para descobrir quais tags contêm texto legível.

O método de Sinan Ünür funciona bem.
No entanto, eu tenho algum acidente com os arquivos eu estava transformando.

Outro método é usar Win32 :: OLE e Win32 :: Área de Transferência como tal:

  • Abra o documento do Word
  • Selecione todo o texto
  • Copiar na área de transferência
  • Imprima o conteúdo da área de transferência em um arquivo txt
  • Esvaziar a área de transferência e fechar o documento do Word

Com base no roteiro dada pelo Sigvald Refsu em http: // computador de programação -forum.com/53-perl/c44063de8613483b.htm , eu vim com o seguinte script.

Nota: eu escolhi para salvar o arquivo txt com o mesmo nome base como o arquivo .docx e na mesma pasta, mas isso pode ser facilmente alterado

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

espero que possa ajuda-o.

Você não pode fazê-lo em VBA, se você não quiser iniciar o Word (ou outro aplicativo do Office). Mesmo se você quis dizer VB, você ainda teria que iniciar uma instância (oculto) do Word para fazer o processamento.

Eu preciso de uma maneira de .doc convertido ou extensões .docx para .txt sem instalar nada

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

Apenas brincando.

Você pode usar antiword para as versões mais antigas de documentos do Word, e tentar analisar o XML dos novos.

Com docxtemplater , você pode facilmente obter o texto completo de uma palavra (Funciona apenas com docx).

Aqui está o código (Node.js)

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

Este é apenas três linhas de código e não depende de qualquer instância palavra (todo o plain JS)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top