문제

전환하는 방법이 필요합니다 .doc 또는 .docx 확장 .txt 아무것도 설치하지 않고. 나는 또한 이것을 분명히하기 위해 단어를 수동으로 열어야 할 필요가 없습니다. 자동으로 실행되는 한.

Perl 또는 VBA가 트릭을 수행 할 수 있다고 생각했지만 온라인에서는 아무것도 찾을 수 없습니다.

제안이 있습니까?

도움이 되었습니까?

해결책

Microsoft Office 응용 프로그램에 대한 훌륭한 정보 소스는 다음과 같습니다. 객체 브라우저. 당신은 그것을 통해 액세스 할 수 있습니다 ToolsMacroVisual Basic Editor. 편집자에 들어가면 누르십시오 F2 Microsoft Office 응용 프로그램에서 제공하는 인터페이스, 메소드 및 속성을 찾아보십시오.

다음은 사용하는 예입니다 Win32 :: 올레:

#!/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__

다른 팁

DOCX를위한 간단한 Perl 전용 솔루션 :

  1. 사용 아카이브 :: zip 얻기 위해 word/document.xml 귀하의 파일 docx 파일. (DOCX는 단지 지퍼 아카이브입니다.)

  2. 사용 xml :: libxml 그것을 구문 분석합니다.

  3. 그런 다음 사용하십시오 xml :: libxslt 텍스트 또는 HTML 형식으로 변환합니다. 좋은 것을 찾기 위해 웹을 설치하십시오 docx2txt.xsl 파일 :)

건배 !

제이.

.doc의 경우 Linux Command Line 도구로 약간의 성공을 거두었습니다. 안티 워드. 그것은 .doc에서 텍스트를 매우 빠르게 추출하여 들여 쓰기를 잘 렌더링합니다. 그런 다음 Bash의 텍스트 파일로 파이프 할 수 있습니다.

.docx의 경우 다른 사용자가 언급 한 것처럼 Ooxml SDK를 사용했습니다. OOXML 파일로 향한 OOXML과 쉽게 작업 할 수 있도록 .NET 라이브러리 일뿐입니다. 텍스트에만 관심이있는 경우 폐기하고 싶은 메타 데이터가 많이 있습니다. 다른 사람들은 이미 내가 보는 코드를 작성했습니다. DocxtOtext.

ASSOCE.WORDS는 내가 찾은 지원이 큰 매우 간단한 API를 가지고 있습니다.

.docx를 풀어서 작동하는 CommandLineFu.com의 BASH 명령도 있습니다.

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

강력하게 추천합니다 Asposewords Java 또는 .NET를 수행 할 수있는 경우. 모든 주요 텍스트 파일 유형간에 단어를 설치하지 않고 변환 할 수 있습니다.

Unix의 맛이 설치된 경우 'Strings'유틸리티를 사용하여 문서에서 읽을 수있는 모든 문자열을 찾아 추출 할 수 있습니다. 찾고있는 텍스트 전후에 약간의 혼란이 있지만 결과는 읽을 수 있습니다.

사용할 수도 있습니다 오픈 오피스 기타 문서, 도면, SpreadHseet 등을 수행하려면 Windows 및 *Nix 플랫폼 모두에서 변환.

프로그래밍 방식 (Windows에서 COM과 유사한 방식으로)을 통해 OpenOffice에 액세스 할 수 있습니다. 우노 Perl을 통해 UNO 바인딩이 존재하는 다양한 언어에서 OpenOffice :: Uno 기준 치수.

OpenOffice :: UNO 페이지 또한 문서를 열어주는 샘플 Perl Scriptlet도 찾을 수 있습니다. txt 사용함으로써 document.storeToURL() 방법 - 참조 파이썬 예제 Perl 요구에 쉽게 적응할 수 있습니다.

.doc은 사용합니다 WordProcessingml 그리고 .docx의 XML 형식 문서의 실제 텍스트를 검색하기 위해 XML을 구문 분석 할 수 있습니다. 읽은 텍스트가 포함 된 태그를 파악하려면 사양을 읽어야합니다.

Sinan ünür의 방법은 잘 작동합니다.
그러나 변환 한 파일에 약간의 충돌이 발생했습니다.

또 다른 방법은 Win32 :: Ole 및 Win32 :: Clipboard를 사용하는 것입니다.

  • 단어 문서를 엽니 다
  • 모든 텍스트를 선택하십시오
  • 클립 보드에 복사하십시오
  • 클립 보드 내용을 txt 파일로 인쇄하십시오
  • 클립 보드를 비우고 Word 문서를 닫습니다

Sigvald Refsu가 제공 한 스크립트를 기반으로합니다 http://computer-programming-forum.com/53-perl/c44063de8613483b.htm, 나는 다음 스크립트를 생각해 냈습니다.

참고 : .docx 파일과 동일한베이스 이름으로 txt 파일을 저장하기로 결정했지만 동일한 폴더에서 쉽게 변경할 수 있습니다.

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

그것이 당신을 도울 수 있기를 바랍니다.

Word (또는 다른 사무실 신청서)를 시작하고 싶지 않다면 VBA에서는 할 수 없습니다. VB를 의미하더라도 처리를 수행하려면 여전히 (숨겨진) 단어 인스턴스를 시작해야합니다.

아무것도 설치하지 않고 .doc 또는 .docx 확장을 .txt로 변환하는 방법이 필요합니다.

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

농담이야.

당신은 사용할 수 있습니다 안티 워드 이전 버전의 Word Documents의 경우 새로운 문서의 XML을 구문 분석하십시오.

와 함께 DocxtEmplater, 당신은 단어의 전체 텍스트를 쉽게 얻을 수 있습니다 (docx만으로 작동).

코드 (node.js)는 다음과 같습니다.

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

이것은 단지 3 줄의 코드이며 어떤 단어 인스턴스에도 의존하지 않습니다 (모든 일반 JS).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top