我正在调试 React 中内置的 Excel 加载项。以前,开发人员将应用程序编码为网站而不是 Excel 加载项,并且没有关注 Office.js。结果,当我们在 Excel 中运行它时,我们遇到了著名的错误Error: Office.js has not fully loaded. Your app must call "Office.onReady()" as part of it's loading sequence (or set the "Office.initialize" function). If your app has this functionality, try reloading this page.
我搜索Office.onReady
并Office.initialize
在整个项目中,我没有找到它们。
在这里frontend/src/index.tsx
,dva是一个“基于 redux、redux-saga 和 react-router 的框架(受 elm 和 choo 启发)”。
import 'react-app-polyfill/ie11';
import 'react-app-polyfill/stable';
import dva from 'dva';
import './index.css';
import router from './router';
import AuthModel from './models/auth';
import SubscribtionModel from './models/subscription';
import AppModel from './models/app';
import { initializeIcons } from 'office-ui-fabric-react/lib/Icons';
//@ts-ignore
//import createLoading from 'dva-loading';
// 1. Initialize
const app = dva();
//app.use(createLoading());
// 2. Plugins
// app.use({});
// 3. Model
//@ts-ignore
app.model(AuthModel);
app.model(SubscribtionModel)
app.model(AppModel);
// 4. Router
//@ts-ignore
app.router(router);
// 5. Start
app.start('#root');
initializeIcons();
有谁知道我应该放在哪里,Office.onReady()
这样我们才能确保每次启动加载项时 Office.js 都可以完全加载?
编辑1:
我试图模仿这个文件并将我的一个更改index.tsx
为
render() {
const { items, farItems } = this.props;
console.log("Here is Office:");
console.log(Office);
return (
<AwaitPromiseThenRender
promise={Promise.resolve().then(async () => {
await Office.onReady();
})}
>
<CommonHeader
items={items.map((item: IHeaderItem) => this.renderItem(item))}
farItems={farItems.map((item: IHeaderItem) => this.renderItem(item))}
/>
</AwaitPromiseThenRender>
);
}
它返回了一个 TypeScript error: Property 'onReady' does not exist on type 'typeof Office'. TS2339
,而该对象Office
在控制台中打印得很好。有人知道这个问题吗?
编辑2:
我尝试在frontend/src/index.tsx
上面添加以下代码。它还是回来了Property 'onReady' does not exist on type 'typeof Office'. TS2339
。
export function render(oldRender: () => void) {
Office.onReady((reason: any) => {
oldRender();
});
}