При поиске с использованием специальных символов Office.js происходит сбой Word Online, но не устанавливается MSWord - PullRequest
0 голосов
/ 24 июня 2019

Поиск с использованием подстановочных знаков, например, пример, приведенный в следующей статье, приводит к сбою Word Online при работе, как и ожидалось, для установленной версии MSWord

https://docs.microsoft.com/en-us/office/dev/add-ins/word/search-option-guidance

Я ищу следующий текст: Оплата счетов Спонсором производится в течение тридцати (30 '

Текст может или не может быть разбит на разрывы строк / разделов. Поэтому я выполняю поиск по шаблону следующим образом: 'Платеж? Из? Счетов-фактур? От? Спонсор? Должен? Быть? Сделал? В? Тридцать? (30'

Это приводит к сбою браузера Word-Online.

Интересно, что в Word Online и MSWord работают следующие функции:

'Оплата счетов Спонсором производится в течение тридцати (30) дней'

Оплата? Из? Счетов-фактур? От? Спонсор? Должен? Быть? Сделал? В? Тридцать? (30)? 'Дней

Похоже, что проблема в незамкнутых скобках в подстановочном выражении.

В соответствии со статьей выше предлагается исключить скобки в квадратных скобках. В MSWord сработало следующее, но Word-Online потерпел крах:

Оплата? Из? Счетов-фактур? От? Спонсор? Должен? Быть? Сделал? В? Тридцать? [(] 30 '

Еще более странно то, что квадратные скобки работают только в том случае, если последний символ экранирован.

Это работает как в MSWord, так и в Word-Online:

включают в себя? Нематериальное? Вещи? [(]

тогда как это работает только в MSWord и вылетает Word-Online

включают в себя? Нематериальные? Вещи? [(] Е

Пример шаблона в статье выше «[*] *» приводит к сбою Word Online при работе в MSWord, как и ожидалось.

input = 'include?intangible?things?[(]e';
const { Word } = window;
Word.run(context => {
    const { body } = context.document;
    const searchResults = body.search(input, {
        matchCase: false,
        ignoreSpace: true,
        ignorePunct: true,
        matchWildcards: true
    });
    context.load(searchResults);
    return context
        .sync()
        .then(() => {

        })
        .catch(error => {            
        });
});

Как MSWord, так и Word Online должны вести себя одинаково, когда оба выполняются через Office.js API.

Это похоже на ошибку в Word Online. Я бы предположил, что это, вероятно, связано с кодировкой URL.

Либо так, либо я неправильно кодирую свой шаблон ввода, когда целью является Word Online. В этом случае вышеприведенная статья нуждается в обновлении, чтобы детализировать, что означает «экранирование» Word Online для специальных символов.

Любопытно, что экранирующие скобки [] сами по себе являются специальными символами.

Word Online сбой

1 Ответ

0 голосов
/ 25 июня 2019

Не идеальный ответ на этот вопрос, но он решает проблему сбоев Word Online и проблему закрытых скобок в одном обращении.Я заменяю все специальные символы в строке поиска на «?»персонажи.Это может привести к неверно идентифицированному фрагменту текста, но вероятность этого достаточно мала, чтобы это не было проблемой для того, чего я пытаюсь достичь.

function replaceSpecialCharacters(input) {
    let modifiedInput = '';
    const specialCharacters = ['[', ']', '(', ')', '{', '}', '*', '?', '<', '>', '!', '@'];
    [...input].forEach(c => {
        if (specialCharacters.includes(c)) {
            modifiedInput = `${modifiedInput}?`;
        } else {
            modifiedInput = `${modifiedInput}${c}`;
        }
    });
    return modifiedInput;
}
...