javascript - 如何通过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);
});
},
);
};
解决方案
您可以尝试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找到
推荐阅读
- angular - 奇怪的 *ngFor 问题
- javascript - 如何让浏览器在发起跨域HTTP请求时包含主机源域的cookies
- angular - 父 li 上的单击侦听器还注册了对子 ul li 子菜单的单击
- python - 如何在只读模式下设置输入的值
- flask - 在 anaconda Prompt 上运行 FLASK 时出错
- java - 如何在终端中使用 .jar 文件?
- debugging - 如何自己重写烧瓶调试重新加载规则?
- sql - 使用 *typed* XML 从父节点读取属性时出现 XQuery 错误(value() 需要单例)
- cassandra - 节点工具修复命令是修复集群中的所有节点还是修复执行命令的单个节点?
- java - Log4j2 中是否使用了 java 本机内存?我发现许多登录本机内存而不是堆