Как я могу получить название документа в Office 365 JavaScript API?

Я пишу офисную надстройку с angularjs, мне нужно получить и установить заголовок документа (который виден в верхней части документа).

это мой код:

function run() {
  Word.run(function (context) {
    var properties = context.document.properties;
    context.load(properties);
    return context.sync()
        .then(function() {
            console.log('thisDocument.properties.title', properties.title);
        })
    })
    .catch(function(error) {
        OfficeHelpers.UI.notify(error);
        OfficeHelpers.Utilities.log(error);
    });
}

но в консоли не печатается название документа!


person MHS    schedule 18.09.2017    source источник
comment
Удалось ли вам найти разумный способ сделать это за это время? Я только что упал в ту же дыру, что и ты с document.properties.title.   -  person dnmh    schedule 09.02.2018
comment
@dnmh, к сожалению, нет! Я застрял!   -  person MHS    schedule 11.02.2018


Ответы (1)


Свойство context.document.properties.title, которое вы записываете в консоль, — это атрибут уровня файла Title, который отображается в разделе "Свойства", если вы выбираете Файл >> Информация (в Excel, работающем на рабочем столе Windows). Это не «заголовок» (текст), который вы видите в верхней части вашего документа, или имя самого файла. Я подозреваю, что если вы проверите атрибут Title на уровне файла для своего документа (через пользовательский интерфейс Word), вы увидите, что атрибут Title не заполнен — - он не будет заполнен, если вы явно не установили его.

Я не очень хорошо знаком с объектной моделью API Word, но вот что может быть полезно. Следующий фрагмент кода получает первый абзац документа (который, если первая строка документа является заголовком, будет представлять заголовок документа), а затем обновляет текст заголовка новой текстовой строкой (при сохранении любое предыдущее форматирование и т. д.).

Word.run(function (context) {

    // get the first paragraph 
    // (if the first line of the document is the title, this will be the contents of the first line (title))
    var firstParagraph = context.document.body.paragraphs.getFirst();
    firstParagraph.load("text");

    // get the OOXML representation of the first paragraph
    var ooXML = firstParagraph.getOoxml();

    return context.sync()
        .then(function () {
            // replace the text of the first paragraph with a new text string
            firstParagraph.insertOoxml(ooXML.value.replace(firstParagraph.text, "NEW TITLE"), "Replace");

            return context.sync();
        });

}).catch(function (error) {
        console.log("Error: " + JSON.stringify(error));
        if (error instanceof OfficeExtension.Error) {
            console.log("Debug info: " + JSON.stringify(error.debugInfo));
        }
    });

Примечание. Если вы не можете предположить, что первым абзацем документа всегда будет заголовок документа (т. е. если иногда документ может не иметь заголовок или если иногда перед заголовком может стоять, например, одна или несколько пустых строк), вам потребуется добавить дополнительную логику к приведенному выше фрагменту, чтобы определить, является ли первый абзац документ действительно является заголовком, прежде чем перейти к логике, которая заменяет содержимое первого абзаца.

person Kim Brandl    schedule 12.10.2017