.NET C# アプリケーションが起動する単語インスタンスから RTF コードを抽出しようとしています。これを実行するコードは次のとおりです。
Clipboard.Clear();
//document is of type Microsoft.Office.Interop.Word.Document
document.Application.Activate();
document.Select();
document.Content.Copy();
if (Clipboard.ContainsData(DataFormats.Text) &&
Clipboard.ContainsData(DataFormats.Rtf))
{
DocumentContent = Clipboard.GetText(TextDataFormat.Rtf);
}
Clipboard.Clear();
定期的に発生しているのは、Clipboard.GetText を呼び出すと、String.Empty が返されることです。そのため、Content.Copy への COM 呼び出しがまだ終了していない可能性があるかどうか疑問に思っていました。私がこれを疑う理由は、DocumnetContent=... にブレークポイントを設定し、それが String.Empty として返された場合、デバッガーを 1 行戻して GetText 行を再度呼び出すと、今度はテキストが含まれるためです。 . 同様に、String.Empty が返された場合は、メモ帳に移動して control+V を押すと、クリップボードにあるはずのコピーされたテキストが貼り付けられます。
この動作には一貫性がないことを強調しなければなりません。自由に再現することはできませんが、アクションを十分に実行すれば (通常、20 回に 1 回はこの動作がトリガーされます)、最終的には取得できます。
ご協力いただきありがとうございます。説明が必要な場合はお知らせください。