API WordJS, добавляющий гиперссылку в ячейку таблицы, вызывает общее исключение
Я пишу надстройку Microsoft Word, используя API javascript Word.
Я пытаюсь создать новую таблицу и вставить ее в документ, а затем пытаюсь добавить гиперссылку в одну из ячеек. Это вызывает GeneralException при последующем вызове context.sync(). Небольшой пример этой проблемы:
export async function run() {
return Word.run(async (context) => {
const paragraph = context.document.body.insertParagraph("Hello World", Word.InsertLocation.end);
await context.sync();
const tableData: string[][] = [
["cell11", "cell12", "cell13"],
["cell21", "cell22", "cell23"],
["cell31", "cell32", "cell33"]
];
const table = paragraph.insertTable(3, 3, Word.InsertLocation.after, tableData);
await context.sync();
// Tried loading contents of table nothing helped
// table.load("rowCount, rows, rows/cells");
// await context.sync();
console.log("start adding link");
const cell = table.getCell(1, 1);
const range = cell.body.getRange();
range.hyperlink = "https://www.google.com";
try {
await context.sync();
} catch (err) {
console.log("Unable to sync link addition: " + err.message);
}
});
}
Консоль показывает:
start adding link
taskpane.ts:37 Unable to sync link addition: GeneralException
Если я удалюrange.hyperlink ...
строку и замените ее на:
cell.body.font.color = "#800000";
cell.shadingColor = "#cccccc";
range.select();
Все ведет себя так, как ожидалось, то есть цвет шрифта и затенение ячейки меняются, а текст ячейки выбирается в пользовательском интерфейсе Word, но синхронизация не работает, если я добавляю строку гиперссылки. Я предполагаю, что мне нужно что-то загрузить, но все, что я пробовал, не сработало. Кто-нибудь может помочь?
1 ответ
The getRange
метод принимаетWord.RangeLocation
параметр со значением по умолчаниюWord.RangeLocation.whole
. При вызове этого метода внутриtableCell
с параметром по умолчанию «целиком» также включается маркер ячейки таблицы, и добавление гиперссылки в этот диапазон запрещено (также поведение в пользовательском интерфейсе). Так что это поведение по дизайну; вместо этого попробуйте использовать следующий способ, чтобы просто получить диапазон содержимого ячейки таблицы:
cell.body.getRange(Word.RangeLocation.content);