何もインストールせずに変換.doc
または.docx
拡張する方法が必要です。.txt
また、明らかにこれを行うために手動で Word を開く必要もありません。オートで動いている限り。
Perl か VBA のどちらかでこのトリックを実行できると考えていましたが、どちらもオンラインで見つけることができません。
助言がありますか?
何もインストールせずに変換.doc
または.docx
拡張する方法が必要です。.txt
また、明らかにこれを行うために手動で Word を開く必要もありません。オートで動いている限り。
Perl か VBA のどちらかでこのトリックを実行できると考えていましたが、どちらもオンラインで見つけることができません。
助言がありますか?
docx のシンプルな Perl のみのソリューション:
Archive::Zipを使用して、word/document.xml
ファイルからファイルを取得しdocx
ます。(docx は単なる zip アーカイブです。)
XML::LibXMLを使用して解析します。
次に、XML::LibXSLTを使用してテキストまたは html 形式に変換します。Web を検索して、素敵なdocx2txt.xslファイルを見つけてください :)
乾杯 !
J.
オブジェクト ブラウザは、Microsoft Office アプリケーションの優れた情報源です。Tools
→ Macro
→からアクセスできます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__
.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'
UNIX のフレーバーがインストールされている場合は、'strings' ユーティリティを使用して、ドキュメントからすべての読み取り可能な文字列を検索および抽出できます。探しているテキストの前後に多少の混乱がありますが、結果は読み取り可能です。
Java または .NET を使用できる場合は、AsposeWordsを強くお勧めします。Word がインストールされていなくても、すべての主要なテキスト ファイル タイプ間で変換できます。
OpenOfficeを使用して、Windowsプラットフォームと* nixプラットフォームの両方で、さまざまなドキュメント、描画、spreadhseetなどの変換を実行することもできることに注意してください。
OpenOffice :: UNOモジュールを介したPerlからなど、UNOバインディングが存在するさまざまな言語からUNOを介してプログラムで(WindowsのCOMに類似した方法で)OpenOfficeにアクセスできます。
OpenOffice :: UNOページには、ドキュメントを開くサンプルのPerlスクリプトレットもあります。その後、メソッドtxt
を使用してドキュメントをエクスポートするだけです。Perlのニーズに簡単に適合できるPythonの例を参照してください。document.storeToURL()
WordprocessingMLおよび.docx の XML 形式を使用する .docは、XML を解析してドキュメントの実際のテキストを取得できます。どのタグに読み取り可能なテキストが含まれているかを把握するには、仕様を読む必要があります。
何もインストールせずに.docまたは.docx拡張子を.txtに変換する方法が必要です
for I in *.doc?; do mv $I `echo $ | sed 's/\.docx?/\.txt'`; done
ほんの冗談ですよ。
古いバージョンのWord文書にアンチワードを使用して、新しいバージョンのxmlを解析してみることができます。
Word (または別の Office アプリケーション) を起動したくない場合は、VBA では実行できません。VB を意味していたとしても、Word の (非表示の) インスタンスを起動して処理を行う必要があります。
docxtemplaterを使用すると、単語の全文を簡単に取得できます (docx でのみ機能します)。
これがコードです(Node.JS)
DocxTemplater=require('docxtemplater');
doc=new DocxTemplater().loadFromFile("input.docx");
result=doc.getFullText();
これはわずか 3 行のコードであり、どの単語インスタンスにも依存しません (すべてプレーンな JS)。