猿问

如何通过office.js Office.initialize获取excel的单元格编号和工作表

有时会收到附加图像错误在 excel 加载项中运行应用程序时出现以下错误。


Office.js 尚未完全加载。您的应用程序必须调用“Office.onReady()”作为其加载序列的一部分(或设置“Office.initialize”函数)。如果您的应用具有此功能,请尝试重新加载此页面。


我已经使用 Office.initialize 函数来获取我们单击 Excel 的单元格编号和工作表编号。但它不会被执行,如果我们在之后重新加载该页面,它将运行(Office.initialize)。


如果我们通过“a”标签(a href)呈现该页面,它将运行良好,但使用 props.history.push 它将无法运行。


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);

            });

        },

    );

};


www说
浏览 244回答 2
2回答

繁华开满天机

我可以通过在页面开头初始化 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;    }); }

喵喔喔

您可以尝试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找到
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答