3

貼り付ける前にコンテンツを処理するために、リッチテキストボックスの貼り付けイベントをインターセプトしています。テーブルや画像などが含まれている場合は、いくつかのカスタムを行う必要があります。コピーされた選択範囲が Word 2010 からのもので、混合コンテンツ (テキストと表/画像など) で構成されている場合、Word はコンテンツをさまざまな形式でクリップボードに配置します。これらには HTML と RTF が含まれますが、私はむしろ WordML を使用したいと考えています。ClipSpyを使って、実際にクリップボードにどのようなフォーマットやデータが入っているか確認したところ、「埋め込みソース」のフォーマットはWordMLを含むフォーマットのようです。これはパッケージとして開くことができると思います:

var stream = Clipboard.GetData("Embed Source") as MemoryStream;
var package = Package.Open(stream);

EndOfStreamException をスローし、何か他のものでラップされている可能性があると考えています。ストリームをディスクに書き込み、7-zip を使用して開くと、コンテンツが期待どおりであることを確認できます。したがって、基本的に 2 つの質問があります。「埋め込みソース」は、WordML を取得するための正しい DataObject ですか? もしそうなら、どうすればデシリアライズできますか?

4

1 に答える 1

1

ストリームをディスクに保存し、適切な docx とのバイナリ比較を行った後、実際には複合ドキュメント ファイル ( http://www.openoffice.org/sc/compdocfileformat.pdf ) にラップされていることがわかりました。最初の数バイトをググった

D0 CF 11 E0 A1 B1 1A E1

これは CDF 形式の識別子です。

パッケージは、OpenMCDF を使用して Compound ファイルから抽出できます。

于 2013-07-02T16:10:51.110 に答える