これは質問ではありませんが、私はhereからRick Kirkhamによってここに送られました。明らかに、Microsoft製品のバグを報告する方法です:-p`context.document.body.insertOoxml`で文書が破損し、単語がクラッシュする
insertOoxml
を 'replace'パラメーターで使用すると、最後に余分な内容が挿入されます。たとえば、新しい空のWord文書で、Script Labに次のコードを使用している場合:
$("#run").click(run);
function run() {
Word.run(function (context) {
var ooxml = context.document.body.getOoxml();
return context.sync().then(function() {
console.log(ooxml.value.length);
context.document.body.insertOoxml(ooxml.value, Word.InsertLocation.replace);
return context.sync();
});
});
}
あなたはこのコードをトリガーするたびに、Word文書には、体の末尾に追加段落を取得します。ドキュメントがコンテンツコントロールで終了すると、新しいドキュメントを取得し、新しいリッチテキストコンテンツコントロールを挿入します。 run
をトリガーすると、コンテンツコントロールが複製され、それ自体の中に挿入されます(したがって、2つのコンテンツコントロールがあり、1つは他に含まれています)。 run
を数回クリックすると、多数のネストされたコンテンツコントロールが作成され、Wordのクロールが遅くなります。プレーンテキストのコンテンツコントロールを挿入し、 'run'を2回トリガすると、単語がクラッシュします(nullポインタの逆参照)。
これはスクリプトラボに関連する問題ではありませんが、スクリプトラボを使用することは、これを再現する最も簡単な方法です。
Wordバージョン:1703、build 7967.2139、2016 MSO(16.0.7927.1020)32ビット。
予想される動作:Wordはクラッシュせず、余分なコンテンツを導入しません。
これで質問しましょう:ドキュメントを破損することなく、フルドキュメントinsertOoxml(ooxml, 'replace')
を使用するにはどうすればいいですか?
ここで問題を解決していただきありがとうございます。それがバグであるかどうかにかかわらず、簡単な回避策があるかどうかに関わらず、同じ症状に遭遇した人はこれを(そして最終的な結果に関係なく)見ることになります。既存のバグがあります。「replace」オプション(insertOoxml)は実際には置き換えられません。製品チームは、お客様の問題の結果として優先順位を上げています。クラッシュについては、スクリプトラボの外で起こるのでしょうか? –
マイケル・ズラトコフスキーが私のポストを編集して「scriptlab」タグを追加した理由が分かりません。なぜなら、問題は関連していないと明示しています。しかし、はい、問題はスクリプトラボの外でも発生します。私は明らかにソースコードを投稿できない独自のoffice-jsプラグインを開発中に問題を発見しました。スクリプトラボはここでは、クラッシュ動作を示す最小限の例を作成するためにのみ使用されています。 'insertOoxml'操作は、挿入されたooxmlが好きな単語にならないときに、一般的に(Wordの内容コントロールでも)多くのWordをクラッシュさせる傾向があります。 – Thiez
少なくとも奇妙なネストされたコンテンツコントロールの問題(および関連するクラッシュ)を取り除くための回避策は、最初に文書の最後に新しい空白を挿入し、空ではない内容(空白をゼロ個取り、しかし、空でない文字列があれば) 'getOoxml()'、おそらくいくつかのooxmlの変更、そして 'insertOoxml(ooxml、 'replace')'を実行し、文書の最後から段落を削除し続けるまで挿入したものを削除しました。これはテキストコンテンツで認識できます( 'insertOoxml'誘導の段落クローンはテキストコンテンツをコピーしません)。 – Thiez