Office.js Word:现在在表中插入列会产生ItemNotFound

时间:2018-02-09 02:32:55

标签: ms-word office-js

以下代码在指示的行上产生“ItemNotFound”错误。直到最近,我相信它运作良好。 如果我注释掉“addCoumns”行(并使rowsToAdd = 0),则没有错误。

背景:我在Word文档中有很多表。所有表都在内容控件中。我的代码循环遍历表并更新值(基于Excel数据)。在更新值之前,它通常会插入/删除行/列,以使表格与源数据的大小相匹配(Excel范围)。 注意:我循环遍历每个单元格,因为它比从2D数组设置整个表格要快得多(特别是如果不是所有单元格都需要更新)。

如何修改代码以避免错误?我认为我的getFirst ... getNext ...方法不是最好的。

在脚本实验室中运行:

$("#run").click(updateTables);
//first insert a table inside a content control
function updateTables() {
    Word.run(function (context) {
        var CCs = context.document.contentControls;
        context.load(CCs, "tag, id");
        return context.sync().then(function () {
        var myTable = CCs.items[0].tables.getFirst();
        var arrValues = myTable.load("values");
        return context.sync().then(function () {
            var rowsToAdd = 1;
            var colsToAdd = 1;
            var rows = arrValues.values.length + rowsToAdd;
            var cols = arrValues.values[0].length + colsToAdd;
            CCs.items[0].tables.getFirst().addRows("end", rowsToAdd);
            CCs.items[0].tables.getFirst().addColumns("end", colsToAdd);       
            return context.sync().then(function () {    
                var tCell;  
                //ItemNotFound error occurs on this line:
                var tRow = CCs.items[0].tables.getFirst().rows.getFirst(); 
                for (var row = 0; row < rows; row++) {
                    tCell = tRow.cells.getFirst();
                    for (var col = 0; col < cols; col++) {
                        tCell.value = 'r' + row + ':c' + col;;
                        if (col < cols - 1) {
                            tCell = tCell.getNext();
                        }
                    }
                    if (row < rows - 1) {
                        tRow = tRow.getNext();
                    }
                }
                return context.sync().then(function () {
                    console.log("Done");

                });
            });
        });
        });
    })
        .catch(OfficeHelpers.Utilities.log);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Word使用deleteColumns或deleteRows冻结。通常在Mac上与Windows相似。

1 个答案:

答案 0 :(得分:0)

超级有趣的问题我需要更详细地研究为什么你的脚本表现得像这样。 但与此同时,我创建了一个等同于你的代码的打字稿,请试一试,我认为它解决了这个问题。

https://gist.github.com/JuaneloJuanelo/f40eab599d7fc7b95a1f942a689ef243