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);
Другие вопросы по тегам