在MS Word插件Javascript API中读取表格边框的颜色和宽度
我试图使用单词add-in-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
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)
});