有时出现附件图像错误在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);
});
},
);
};
您可以尝试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找到该文档
我能够通过在页面开始处初始化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;
});
}