首页 > 解决方案 > Office.js | Excel 加入 | 点击获取选定的单元格地址

问题描述

我正在使用 Office.js 开发 Excel Web 加载项。我需要通过以下场景获取选定单元格的地址:

  1. 打开 Excel,不要加载加载项,单击 Excel 工作表区域中的任何单元格。例如:A4
  2. 加载加载项。
  3. 再次单击与加载我们选择的加载项之前在工作表区域突出显示的相同单元格编号,例如:A4。

它没有触发以下代码:

Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged,
        function (eventArgs) {
            Excel.run(function (ctx) {
                var range = ctx.workbook.getSelectedRange();
                range.load(['address', 'values']);
                return ctx.sync().then(function () {
                    showNotification("", range.values[0][0] + " Address:" + range.address);
                });
            });                    
        });

注意: 如果我选择了以前选择的单元格 ID 以外的单元格 ID,例如 A5,它的工作。即使我再次尝试从单元格 id A5 选择到先前选择的单元格 id A4,它也可以正常工作。 只有当我们尝试选择相同的单元格时,它才不会触发事件。花很多时间有人可以帮助或它在microsoft excel中的限制吗?

标签: excelreactjsoffice365office-jsexcel-addins

解决方案


我认为这是设计使然,因为您正在收听 SelectionChanged 事件,如果当前选择是 A4,并且您单击 A4,它不会触发事件,因为您没有更改选择。

我不确定您的情况,如果您想显示当前选择,您可以在注册事件之前添加代码。这是一个示例代码

async function run() {
  await Excel.run(async (context) => {
    var range = context.workbook.getSelectedRange();
    range.load();
    await context.sync();
    console.log(range);
    Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged, showSelection);
  });
}

async function showSelection(){
  Excel.run(async (context) => {
    var range = context.workbook.getSelectedRange();
    range.load();
    await context.sync();
    console.log(range);
  });
}

推荐阅读