質問

変換する方法が必要です .doc または .docx への拡張子 .txt 何もインストールせずに。また、これを行うために Word を手動で開く必要もありません。オートで走っている限り。

Perl か VBA のどちらかがそのトリックを実行できると考えていましたが、どちらもオンラインで見つけることができません。

助言がありますか?

役に立ちましたか?

解決

のMicrosoft Officeアプリケーションのための情報の優れた供給源は、のオブジェクトブラウザのであることに注意してください。あなたはToolsMacroVisual Basic Editor経由でアクセスすることができます。エディタであるならば、Microsoft Officeアプリケーションによって提供されるインタフェース、メソッド、およびプロパティを参照するには、 F2 を打っています。

ここでの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__

他のヒント

docx 用のシンプルな Perl のみのソリューション:

  1. 使用 アーカイブ::Zip を得るために word/document.xml あなたからのファイル docx ファイル。(docx は単なる zip 形式のアーカイブです。)

  2. 使用 XML::LibXML それを解析します。

  3. 次に、使用します XML::LibXSLT テキストまたは HTML 形式に変換します。ウェブを検索して素敵なものを見つけてください docx2txt.xsl ファイル :)

乾杯 !

J.

.DOCのために、私は、Linuxのコマンドラインツール antiword を持ついくつかの成功を収めてきました。これは、インデントの良いレンダリングを与える、非常に迅速に.DOCからテキストを抽出します。その後、パイプはbashでテキストファイルにあることができます。

いくつかの他のユーザーが述べたように、

.docxのために、私はOOXML SDKを使用しました。簡単にOOXMLファイルにアップzip形式で圧縮されたOOXMLで動作するようにするだけの.NETライブラリです。あなたがテキストにのみ関心がある場合は破棄したいと思うでしょうメタデータがたくさんあります。いくつかの他の人々はすでに私が見るのコードを書かれている:。 DocXToTextする

Aspose.Wordsでは、あまりにも、私が発見した素晴らしいサポートと非常にシンプルなAPIを持っています。

の.docxを解凍することで動作commandlinefu.comから、このbashコマンドもあります:

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

私を強くお勧めします<のhref = "http://www.aspose.com/categories/file-format-components/aspose.words-for-.net-and-java/default.aspx" のrel = "nofollowをnoreferrer "> AsposeWords には、Javaや.NETを行うことができます。これは、すべての主要なテキストファイルの種類の間で、Wordがインストールされずに、変換することができます。

は、UNIXの一部のフレーバーをインストールしている場合は、ドキュメントからの読み取り可能なすべての文字列を検索し、抽出するために「文字列」ユーティリティを使用することができます。そこあなたが探しているテキストの前後にいくつかの混乱になりますが、結果は読みやすいでしょう。

も使用できることに注意してください オープンオフィス さまざまな文書、描画、スプレッドシートなどを実行するため。Windows と *nix の両方のプラットフォームでの変換。

OpenOffice にはプログラムで (Windows の COM に似た方法で) アクセスできます。 ウノ UNO バインディングが存在するさまざまな言語から (これには、 OpenOffice::UNO モジュール。

OpenOffice::UNO ページ ドキュメントを開くサンプル Perl スクリプトレットもあります。あとはそれをエクスポートするだけです。 txt を使用して document.storeToURL() メソッド -- を参照 Python の例 Perl のニーズに簡単に適合させることができます。

を使用する .doc ワードプロセッシングML そして .docx の XML 形式 XML を解析してドキュメントの実際のテキストを取得できます。どのタグに読み取り可能なテキストが含まれているかを確認するには、その仕様を読む必要があります。

Sinan Ünür の方法はうまく機能します。
ただし、変換中のファイルでクラッシュが発生しました。

もう 1 つの方法は、Win32::OLE と Win32::Clipboard をそのまま使用することです。

  • Word文書を開きます
  • すべてのテキストを選択します
  • クリップボードにコピーする
  • クリップボードの内容を txt ファイルで印刷します
  • クリップボードを空にして Word 文書を閉じます

Sigvald Refsu が提供したスクリプトに基づいています。 http://computer-programming-forum.com/53-perl/c44063de8613483b.htm, 以下のスクリプトを思いつきました。

注記:txt ファイルを .docx ファイルと同じベース名で同じフォルダーに保存することにしましたが、これは簡単に変更できます

########################################### 
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(または他のOfficeアプリケーション)を起動したくない場合は、

あなたはVBAでそれを行うことはできません。あなたはVBを意味している場合でも、あなたはまだ処理を行うためのWordの(隠された)インスタンスを起動する必要があると思います。

  

私は何もインストールせず.txtに.DOCまたは.docxの拡張を変換する方法が必要です。

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

ただ、冗談を言ってます。

あなたは、Wordドキュメントの古いバージョンのためののantiword のを使用して、新しいものの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