Microsoft は、Office ファイルのバイナリ仕様を公開しています。.Doc からテキストを抽出する必要があります。このページは、Doc からテキストを抽出することは難しくないことを暗示しているようですが、私は従いません。
これは私がこれまでに持っているものです。
wIdent と wFib の値が間違っています。正しい方向に向けてください。
UInt16 wIdent; // (2 bytes): An unsigned integer that specifies that this is a Word Binary File. This value MUST be 0xA5EC.
UInt16 wFib; // (2 bytes): An unsigned integer that specifies the version number of the file format used. Superseded by FibRgCswNew.nFibNew if it is present. This value SHOULD<13> be 0x00C1.
using (FileStream fs = File.OpenRead(fileName))
{
UTF8Encoding utf8 = new UTF8Encoding(true);
BinaryReader brFile = new BinaryReader(fs);
wIdent = brFile.ReadUInt16();
Debug.WriteLine(wIdent.ToString());
Debug.WriteLine(String.Format("{0:x}", wIdent)); // cfd0 wrong value
wFib = brFile.ReadUInt16();
Debug.WriteLine(wFib.ToString()); // 57361 wrong value
byte[] b = new byte[1024];
while (brFile.Read(b, 0, b.Length) > 0)
{
Debug.WriteLine(utf8.GetString(b));
}
}
上記はほとんどのテキストを表示しますが、他の多くのものも表示します。
OpenXML 経由で docx を使用しています。セミフォーマットが必要なため、iFilter だけでは不十分です。テキストに対してアルゴリズムを実行して、興味のないドキュメントを選別します。ドキュメントの簡単なテキストにも使用されるため、ファイルをダウンロードするかどうかを決定したり、自動コーディングを行うことができます。
Office 相互運用はオプションではありません。これはサーバー用であり、Microsoft はその環境での Office オートメーションを推奨していません。試してみましたが、処理する必要があるドキュメントの量に対して安定していません。