13

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

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

助言がありますか?

4

11 に答える 11

13

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

  1. Archive::Zipを使用して、word/document.xmlファイルからファイルを取得しdocxます。(docx は単なる zip アーカイブです。)

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

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

乾杯 !

J.

于 2009-07-10T17:02:25.493 に答える
9

オブジェクト ブラウザは、Microsoft Office アプリケーションの優れた情報源です。ToolsMacro→からアクセスできますVisual Basic Editor。エディターに入ったら、F2Microsoft Office アプリケーションが提供するインターフェイス、メソッド、およびプロパティを参照します。

以下は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__
于 2009-07-10T16:36:55.667 に答える
5

.doc については、Linux コマンド ライン ツールのantiwordである程度成功しました。.doc からテキストを非常に迅速に抽出し、インデントを適切にレンダリングします。次に、それを bash のテキスト ファイルにパイプできます。

.docx については、他のユーザーが言及したように OOXML SDK を使用しました。OOXML ファイルに圧縮された 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'
于 2011-08-28T05:30:55.333 に答える
4

UNIX のフレーバーがインストールされている場合は、'strings' ユーティリティを使用して、ドキュメントからすべての読み取り可能な文字列を検索および抽出できます。探しているテキストの前後に多少の混乱がありますが、結果は読み取り可能です。

于 2009-07-10T17:11:53.350 に答える
4

Java または .NET を使用できる場合は、AsposeWordsを強くお勧めします。Word がインストールされていなくても、すべての主要なテキスト ファイル タイプ間で変換できます。

于 2009-07-10T16:02:53.460 に答える
3

OpenOfficeを使用して、Windowsプラットフォームと* nixプラットフォームの両方で、さまざまなドキュメント、描画、spreadhseetなどの変換を実行することもできることに注意してください。

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

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

于 2010-03-09T17:21:16.400 に答える
1

WordprocessingMLおよび.docx の XML 形式を使用する .docは、XML を解析してドキュメントの実際のテキストを取得できます。どのタグに読み取り可能なテキストが含まれているかを把握するには、仕様を読む必要があります。

于 2009-07-10T15:54:36.237 に答える
0

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

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

ほんの冗談ですよ。

古いバージョンのWord文書にアンチワードを使用して、新しいバージョンのxmlを解析してみることができます。

于 2009-07-10T17:36:59.963 に答える
0

Word (または別の Office アプリケーション) を起動したくない場合は、VBA では実行できません。VB を意味していたとしても、Word の (非表示の) インスタンスを起動して処理を行う必要があります。

于 2009-07-10T15:56:05.657 に答える
0

docxtemplaterを使用すると、単語の全文を簡単に取得できます (docx でのみ機能します)。

これがコードです(Node.JS)

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

これはわずか 3 行のコードであり、どの単語インスタンスにも依存しません (すべてプレーンな JS)。

于 2014-09-22T14:22:24.240 に答える