Excel JS React-运行代码而不打开Taskpane

如何解决Excel JS React-运行代码而不打开Taskpane

我有一个使用Office / Excel Javascript API用React编写的Excel插件。我面临以下挑战:

  • 我正在尝试创建一个全局单击事件,以检测单元格单击并查找绑定
  • 如果绑定可用,则应打开特定的任务窗格
  • 问题在于onSelectionChanged事件处理程序仅在打开任务窗格时起作用。
  • 任务窗格关闭时,事件不再起作用
  • manifest.xml文件配置有“ ShowTaskpane”操作,可打开任务窗格。

如何在Excel文档中启动onSelectionChanged事件并使之保持活动状态?

有关我的index.js代码,请参见下文。

import 'office-ui-fabric-react/dist/css/fabric.min.css';
import App from './components/App';
import { AppContainer } from 'react-hot-loader';
import { initializeIcons } from 'office-ui-fabric-react/lib/Icons';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { browserRouter as Router,Route,Link } from 'react-router-dom';

initializeIcons();

let isOfficeInitialized = false;

const title = 'Excel Plugin';

const render = (Component) => {
    ReactDOM.render(
        <AppContainer>
            <Router>
                <div>
                    <Route
                        path="/:token"
                        component={({ match,location }) => {
                            return <Component title={title} isOfficeInitialized={isOfficeInitialized} match={match} location={location} />;
                        }}
                    />
                </div>
            </Router>
        </AppContainer>,document.getElementById('container')
    );
};

/* Render application after Office initializes */
Office.initialize = () => {
    //Create global click event

    Excel.run(async function (context) {
        context.workbook.onSelectionChanged.add(handleChange);
        return context.sync();
    }).catch(errorHandlerFunction);

    function handleChange(e) {
        console.log('Clicking cell!');

        Excel.run(async function (context) {
            let range = context.workbook.getSelectedRange();
            range.values = 'Clicked!';

            return context.sync();
        });
    }

    function errorHandlerFunction(e) {
        console.log(e);
    }

    render(App);
};

Office.onReady = () => {
    Office.addin.setStartupBehavior(Office.StartupBehavior.load);
};

/* Initial render showing a progress bar */
render(App);

if (module.hot) {
    module.hot.accept('./components/App',() => {
        const NextApp = require('./components/App').default;
        render(NextApp);
    });
}

解决方法

默认情况下,您的加载项将在单独的JavaScript运行时环境中运行功能区按钮,自定义功能和任务窗格的代码。这会造成一些局限性,例如无法轻松共享全局数据,以及无法从自定义功能访问所有CORS功能。

但是,您可以配置Excel加载项以在同一JavaScript运行时(也称为共享运行时)中共享代码。这样可以更好地协调外接程序,并可以从外接程序的所有部分访问任务窗格DOM和CORS。

使用共享的运行时,您的加载项可以在任务窗格关闭后继续运行代码。

本文介绍了如何configure shared runtime

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?