概要:(10 10より大きい)大きなワードテーブルでOffice.js Wordがアドインを:大きなテーブル内の更新値とパフォーマンスの問題
- 更新値は非常に遅いです。 パフォーマンスは、テーブルのサイズが指数関数的に悪化します。
- 私は
myTable.values = arrNewValues
を使用しています。私も試しましたmyTable.addRows("end", rows, arrNewValues)
。ここで、arrNewValuesは 2D配列です。 - また、getOoxml()と のinsertOoxml()を使って更新を試みましたが、他の問題が発生しました。 解決できましたが、パフォーマンスは良いです。
- "ScreenUpdating"によってパフォーマンスが低下しているようです(同じ問題がVBAに存在し、ScreenUpdating = falseで解決されます)。 ScreenUpdatingを一時的に無効にする機能を追加することが非常に重要と考えています。
- テーブル更新のパフォーマンスを改善する別の方法はありますか?
背景:
マイアドイン(https://analysisplace.com/Solutions/Document-Automation)は、文書の自動化(Word文書の様々なアップデートの内容)を行います。多くの顧客は、大規模な表のテキストを更新できるようにしたいと考えています。いくつかの文書には、数十のテーブル(付録)があります。私は、これらのドキュメントの更新がテーブル更新のために許容できないほど遅い(1分以上)という問題にぶつかりました。テーブルのサイズによって
更新時間:10のカラムによって
- 2行:0.33秒
- 10列で4行:0.52秒
- 10本のカラムによる8行:1.5秒
- 16行×10列:5.5秒
- 32行10列20.8秒
- 64行10列88秒
コード(スクリプトラボ)Office.jsサンプル:
function updateTableCells() {
Word.run(function (context) {
var arrValues = context.document.body.tables.getFirst().load("values");
return context.sync().then(
function() {
var rows = arrValues.values.length;
var cols = arrValues.values[0].length;
console.log(getTimeElapsed() + "rows " + rows + "cols " + cols);
var arrNewValues = [];
for (var row = 0; row < rows; row++) {
arrNewValues[row] = [];
for (var col = 0; col < cols; col++) {
arrNewValues[row][col] = 'r' + row + ':c' + col;
}
}
console.log(getTimeElapsed() + 'Before setValues ') ;
context.document.body.tables.getFirst().values = arrNewValues;
return context.sync().then(
function() {
console.log(getTimeElapsed() + "Done");
});
});
})
.catch(OfficeHelpers.Utilities.log);
}
サンプルWordのVBAコード:
VBAのパフォーマンスが偽ScreenUpdating =なしOffice.js性能に似ています。 ScreenUpdating = Falseの場合、パフォーマンスは即座に向上します。パフォーマンスの低下を説明する
Sub PopulateTable()
Application.ScreenUpdating = False
Dim nrRow As Long, nrCol As Long
Dim tbl As Word.Table
Set tbl = ThisDocument.Tables(1)
For nrRow = 1 To 32
For nrCol = 1 To 10
tbl.Cell(nrRow, nrCol).Range.Text = "c" & nrRow & ":" & nrCol
Next nrCol
Next nrRow
End Sub
記事:参照「テーブルを自動化するとパフォーマンスの向上」:Office.jsには「偽ScreenUpdating =」がない示すhttps://msdn.microsoft.com/en-us/library/aa537149(v=office.11).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-3
投稿:私たちは「勝ったようScreenUpdating Office-js taskpaneとEquivalent to Application.ScreenUpdating Property in office-js Excel add-in の音すぐにそれを見てください。getOoxml()とinsertOoxml()経由で更新テーブルに関連
投稿:Word Office.js: issues with updating tables in ContentControls using getOoxml() and insertOoxml()
私のテストでは、テーブルが表示されない場合、更新時間が約30%短縮されます。しかしあなたのアイデアに基づいて、「コンテンツに合わせて自動的にサイズを変更する」がチェックされていないと、更新時間が80%短縮されることも発見しました。したがって、32x10テーブルの場合、21秒から1.7秒に短縮できます。このオプションは、TableTools>レイアウト>プロパティ>テーブル>オプションで設定します。残念ながら、Office.jsを使用してオフにする方法はないので、ユーザーが手動でオフにする必要があります。 –
実際のお客様のドキュメントを更新するほど、あなたは正しいことが分かります。 Office.jsは、大きな表が表示されていないドキュメントの上部にある場合、大量のドキュメントを許容範囲内で高速に更新できます。私が文書の終わりにいる場合(たとえテーブルがなくても)、かなり遅くなります。 –