Где можно поместить `Office.onReady ()`, чтобы Office. js мог загружаться каждый раз - PullRequest
0 голосов
/ 08 апреля 2020

Я отлаживаю надстройку Excel, встроенную в React. Ранее разработчик кодировал приложение, как если бы оно было веб-сайтом, а не надстройкой 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.

enter image description here

Я искал Office.onReady и Office.initialize во всем проекте я их не нашел.

Вот frontend/src/index.tsx, где dva - это «фреймворк, основанный на redux, redux-saga и Reaction-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:

Я попытался mimi c этот файл и изменил один из моих 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: 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();
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...