コンテンツコントロールを使用してOpenXMLドキュメントを生成するアプリケーションがあります。
新しいコンテンツコントロールを作成するには、相互運用機能とメソッドを使用しますContentControls.Add
。このメソッドは、追加されたコンテンツコントロールのインスタンスを返します。
コンテンツコントロールのIDを保存して後で参照するロジックがありますが、一部のコンピューターでは奇妙な問題が発生しています。
作成したコンテンツコントロールのIDプロパティにアクセスすると、数値IDの文字列が返されます。問題は、この値が大きすぎる場合、ドキュメントを保存した後、ドキュメントのdocument.xmlを調べた場合です。生成されたドキュメントでは、<w:id/>
要素の要素に負の値があります。これは、生成されたコントロールのプロパティ<w:sdtPr/>
から取得した値と符号付きで同等です。Id
例えば:
var contentControl = ContentControls.Add(...);
var contentControlId = contentControl.ID;
// the value of contentControlId is "3440157266"
ドキュメントを保存してパッケージエクスプローラーで開くとId
、コンテンツコントロールのは「3440157266」ではなく「-854810030」になります。
私が理解したのはこれです:
((int)uint.Parse("3440157266")).ToString() returns "-854810030"
なぜこれが起こるのかについて何か考えはありますか?Id
生成されたコントロールを制御しないため、この問題を再現するのは困難です。これId
は、相互運用ライブラリによって自動的に生成されます。