要点:
myTable.values = arrNewValues
。我也试过了
myTable.addRows("end", rows, arrNewValues)
。其中arrNewValues是一个
二维数组。 背景
我的加载项(https://analysisplace.com/Solutions/Document-Automation)执行文档自动化(更新各种Word文档中的内容)。许多客户希望能够更新大表中的文本。有些文件有几十个表(附录)。我遇到了由于表更新而导致更新这些文档的速度慢得令人无法接受(一分钟以上)的问题。
按表格大小更新时间:
示例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 = False的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
解释性能低下的文章:请参阅“自动化表格时提高绩效”:https://msdn.microsoft.com/en-us/library/aa537149(v=office.11).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-3
指示Office.js中没有“ScreenUpdating = False”的帖子: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()
答案 0 :(得分:1)
这可能不是您正在寻找的答案,但我一直在使用单词添加来验证软件,我们正在谈论更新500-1000行,并进行大量的格式更改。
无论如何,我发现有一件事有帮助,就是在对表格进行更改之前滚动文档中的其他位置。只是看它的行为将减慢10-20倍。它并不总是即时但接近。