Разработка надстройки Office: вставка таблицы в Word 2016

Я пытаюсь вставить таблицу с помощью Office.js в тело документа, но безрезультатно.

Я использовал следующий код:

function insertSampleTable() {

    showNotification("Insert Table", "Inserting table...")

    Word.run(function (context) {
        // Create a proxy object for the document body.
        var body = context.document.body;

        body.insertTable(2, 2, Word.InsertLocation.end, ["a"]);

        // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion.
        return context.sync();
    })
    .catch(errorHandler);

}

Но при нажатии на кнопку выдает следующую ошибку:

Error: TypeError: Object doesn't support property or method 'insertTable'

Любая помощь будет оценена. Я попытался проверить сайт Microsoft Office Dev, но у них нет подобных образцов.

Спасибо!


person vegavegs    schedule 01.07.2016    source источник
comment
Майкл, мы добавили объект таблицы как часть API 1.3. проверьте открытую спецификацию: github.com/OfficeDev/office-js-docs /tree/WordJs_1.3_Openspec   -  person Juan Balmori    schedule 01.07.2016


Ответы (2)


Возможно, Майкл не знает об этом, но недавно мы отправили (теперь это GA) табличный объект, который вы можете использовать в Word. И дает вам НАМНОГО больше функциональных возможностей, чем просто вставка HTML.

Вот документация для объекта таблицы: https://docs.microsoft.com/en-us/javascript/api/word/word.table?view=office-js

Кстати, в вашем коде есть ошибка. ожидаемый аргумент — двумерный массив. поэтому вам нужно предоставить что-то вроде этого:

   Word.run(function (context) {
            // Create a proxy object for the document body.
            var body = context.document.body;

            body.insertTable(2, 2, Word.InsertLocation.end, [["a","b"], ["c","d"]]);

            // Synchronize the document state by executing the queued commands, and return a promise to indicate task completion.
            return context.sync();
        }).catch(function (e) {

            console.log(e.message);
        })
        

надеюсь это поможет!!!

Благодарность!! Хуан (PM для Word JavaScript API)

person Juan Balmori    schedule 01.07.2016
comment
Привет Хуан, я получаю InvalidArgument при вызове метода. Не могли бы вы объяснить требование а) Убедитесь, что вы используете сборку, которая поддерживает API таблиц? Что делать, если я использую установленную версию (не 365) Office 2016? Должен ли я в любом случае установить средство развертывания Office 2016? - person jeanie77; 29.08.2016
comment
возникла проблема с бета-версией CDN Office.js, мы обновляем ее прямо сейчас, просто подождите несколько дней. API был отправлен в виде предварительной версии как часть обновления Office за апрель 2016 года, просто убедитесь, что у вас установлена ​​сборка более поздней версии, чем 16.6965. Просто зайдите в Файл->Учетная запись, и появится возможность обновить Office. - person Juan Balmori; 29.08.2016
comment
Первая ссылка не работает, документация по объекту таблицы теперь находится здесь: docs.microsoft.com/fr-fr/javascript/api/word/ - person glacasa; 01.10.2018
comment
ссылка исправлена ​​​​на мой ответ. Также обратите внимание, что API теперь находится в GA. - person Juan Balmori; 04.10.2018

Вы можете использовать метод insertHTML для любой объект диапазона/тела/абзаца для выполнения этой задачи. Вот код:

Word.run(function (context) {
    context.document.body.insertHtml(
        "<table><tr><td>a</td><td>b</td></tr><tr><td>1</td><td>2</td></tr></table>",
        Word.InsertLocation.end
    );
    return context.sync().then(function(){});
}).catch(function(error){});

-Майкл Сондерс (PM для надстроек Office)

person Michael Saunders    schedule 01.07.2016