关闭对话框

时间:2017-03-23 00:48:40

标签: excel dialog edit add-in office-js

在Excel加载项中,在关闭使用displayDialogAsync创建的对话框后,您无法编辑工作表中的单元格。如果单击工作表外的任何其他位置(功能区,任务窗格等),最小化/最大化Excel,或双击单元格,则可以再次编辑。如果您在无法编辑时滚动,则excel中的所有内容都将变为“无法点击”#34; 此外,我注意到标题栏(显示文档名称)仍然显示为灰色,直到您在工作表外单击,就好像Excel没有焦点一样。

我能够使用Visual Studio中的基本Excel加载项模板重现这一点:

在清单中,我在功能区上添加了一个按钮(打开对话框):

 <Control xsi:type="Button" id="DDR.SettingsButton">
              <Label resid="DDR.SettingsButton.Label" />
              <Supertip>
                <!-- ToolTip title. resid must point to a ShortString resource. -->
                <Title resid="DDR.SettingsButton.Title" />
                <!-- ToolTip description. resid must point to a LongString resource. -->
                <Description resid="DDR.SettingsButton.Text" />
              </Supertip>
              <Icon>
                <bt:Image size="16" resid="Contoso.tpicon_16x16" />
                <bt:Image size="32" resid="Contoso.tpicon_32x32" />
                <bt:Image size="80" resid="Contoso.tpicon_80x80" />
              </Icon>

              <Action xsi:type="ExecuteFunction">
                <FunctionName>openDialog</FunctionName>
              </Action>

            </Control>

然后,函数文件的函数:

function openDialog(event) {
    Office.context.ui.displayDialogAsync(window.location.origin + "/functions/Dialog.html", { height: 50, width: 50 }, function dialogCallback(asyncResult) {
        if (asyncResult.status !== "failed") {
           var dialog = asyncResult.value;
            dialog.addEventHandler(Office.EventType.DialogMessageReceived, function (args) {
                dialog.close();
                event.completed();
            });
            dialog.addEventHandler(Office.EventType.DialogEventReceived, function (arg) {
                switch (arg.error) {
                    case 12006:
                        event.completed();
                        break;
                    default:
                        break;
                }
            });
        }
    });
}

然后,我创建了一个非常简单的对话框:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script>
    <script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.2.1.min.js"></script>
    <script>
        Office.initialize = function () {
            $('#buttonClose').click(close);

        };

        function close() {
            Office.context.ui.messageParent("close");
        }

    </script>

</head>
<body>
    <Button id="buttonClose">Close</Button>
</body>
</html>

我遇到了一个非常类似的行为,这个行为是由我嵌入任务面板的iframe引起的(现在已修复)(原始问题在这里:Unable to edit cells after a setSelectedDataAsync in Excel)。

是否有解决方法/修复方法?

谢谢!

0 个答案:

没有答案