Как получить номер ячейки и имя листа Excel по офисам. js Office.initialize? - PullRequest
1 голос
/ 07 апреля 2020

enter image description here Иногда появляется ошибка с вложенным изображением Получение ошибки ниже при запуске приложения в надстройке Excel.

Office. js загружен не полностью , Ваше приложение должно вызвать «Office.onReady ()» как часть своей последовательности загрузки (или установить функцию «Office.initialize»). Если ваше приложение имеет эту функцию, попробуйте перезагрузить эту страницу.

Я использовал функцию Office.initialize, чтобы получить номер ячейки и номер листа, где мы нажимаем на Excel. Но это не выполняется, если мы перезагрузим эту страницу, после этого она запустится (Office.initialize).

Если мы отобразим эту страницу с помощью тега "a" (href), она будет работать нормально, но с подпорками .history.pu sh это не будет работать.

Office.initialize = () => {
    Office.context.document.addHandlerAsync(
        Office.EventType.DocumentSelectionChanged,
        () => {
            Excel.run(ctx => {
                const range = ctx.workbook.getSelectedRange();
                range.load('address');
                return ctx.sync().then(() => {
                    const str = range.address;
                    if (str) {
                        const arr = str.split('!');
                        if (arr[1] !== '1:1048576') {
                            const cellNumber = arr[1];
                            ExcelValue.cellValue = cellNumber;
                        }
                    }
                });
            });
            Excel.run(context => {
                const sheet = context.workbook.worksheets.getActiveWorksheet();
                sheet.load('name');
                return context.sync().then(() => {
                    ExcelValue.sheetName = sheet.name;
                    setSheet(ExcelValue);
                });
            }).catch(error => {
                console.log(error.debugInfo);
            });
        },
    );
};

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Мне удалось добиться, инициализировав Office в начале страницы и вызвав функцию, как показано ниже.

Office.initialize = function () {
    $(document).ready(function () {
        sheetPropertiesChanged();
     });
   };
   async function sheetPropertiesChanged() {    
    var rangeAddress;

    await Excel.run(async context => {
        const range = context.workbook.getSelectedRange();
        // Read the range address
        range.load("address");
        await context.sync();
        console.log(range.address);
        rangeAddress=range.address;
    }); 
}
0 голосов
/ 07 апреля 2020

Вы можете попробовать Office.onReady(), так как событие Office.initialize() происходит в конце внутреннего процесса, в котором Office. js инициализирует себя. И он срабатывает сразу после окончания внутреннего процесса. Если код, в котором вы назначаете обработчик для события, выполняется слишком долго после того, как событие сработало, тогда ваш обработчик не запускается.

Поэтому мы рекомендуем использовать Office.onReady() вместо Office.initialize(). Хотя Office.initialize() все еще поддерживается, Office.onReady() обеспечивает большую гибкость.

Документ можно найти по адресу https://docs.microsoft.com/en-us/office/dev/add-ins/develop/initialize-add-in

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...