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

问题描述 投票:0回答:2

enter image description here有时出现附件图像错误在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);
            });
        },
    );
};
javascript excel reactjs react-router office-js
2个回答
0
投票

您可以尝试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找到该文档


0
投票

我能够通过在页面开始处初始化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;
    }); 
}
© www.soinside.com 2019 - 2024. All rights reserved.