在MS Word插件Javascript API中读取表格边框的颜色和宽度

在MS Word插件Javascript API中读取表格边框的颜色和宽度,javascript,ms-word,office-js,word-addins,word-web-addins,Javascript,Ms Word,Office Js,Word Addins,Word Web Addins,我试图使用单词add-in-Javascript-api打印文档中所有表的上边框的颜色和宽度 我正在使用以下代码: Word.run(function (context) { var range = context.document.getSelection(); var tables = context.document.body.tables; context.load(range); context.load(tabl

我试图使用单词add-in-Javascript-api打印文档中所有表的上边框的颜色和宽度

我正在使用以下代码:

    Word.run(function (context) {
        var range = context.document.getSelection();
        var tables = context.document.body.tables;
        context.load(range);
        context.load(tables);
        return context.sync().then(function () {
            for (var i = 0; i < tables.items.length; i++) {
                var topBorder = tables.items[i].getBorder("Top");
                context.load(topBorder, ['color', 'width']);
                var color = "1", width = "1";
                context.sync().then(function () {
                    color = topBorder.color.toString();
                    width = topBorder.width.toString();
                });
                range.insertText(color, "End");
                range.insertText(width, "End");
            }
            return context.sync();
        });
    });
但是当我运行这个时,它会打印11,而不是打印正确的值

我曾尝试在网上搜索一些示例代码,但只能找到设置值的代码。我错过了什么


谢谢

代码中的一些问题:

次要:您不需要加载范围对象,因为您正在向其写入而不是读取它。 循环中有一个context.sync。这很少是个好主意。它会影响性能,并使您很难对代码进行推理。通常的修复方法是循环两次,循环之间使用一个context.sync。第一个循环填充将在第二个循环中循环的数组,并加载将在第二个循环中读取的每个Office对象属性。请参阅下面的代码。 你有一个context.sync.then,里面有另一个context.sync.then。如果将console.logouter作为外部then的最后一行,将console.loginner作为内部then的第一行,您将看到外部then在内部then之前完成。这就是你得到11分的原因。写入文档的行在这些变量从初始值更改之前运行。 通过在工具中运行代码,我发现行color=topBorder.color.toString;正在抛出一个错误,说明颜色属性未加载。这可能是分支承诺链的另一个副作用。 下面的代码工作正常,更简单,性能更高,因为无论文档中有多少表,它只同步3次

Word.run(function (context) {
    var range = context.document.getSelection();
    var tables = context.document.body.tables.load("items");
    var topBorders = [];
    return context.sync()
      .then(function () {
        for (var i = 0; i < tables.items.length; i++) {
          topBorders.push(tables.items[i].getBorder("Top").load(['color', 'width']));
        }
      })
      .then(context.sync)
      .then(function () {
        for (var i = 0; i < topBorders.length; i++) {
          range.insertText(topBorders[i].color.toString(), "End");
          range.insertText(topBorders[i].width.toString(), "End");
        }
      })
      .then(context.sync)
});