You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel Web Add-in使用displayDialogAsync出现TypeError报错求助

问题:Excel Web Add-in 使用displayDialogAsync打开对话框报错

开发Excel Web Add-in时,原功能区按钮打开任务窗格功能正常,改用displayDialogAsync打开对话框时,对话框能正常打开但出现TypeError报错,以下是详细信息:


相关代码

commands.js

function CompanyDisplayDialog(event) {
  Office.context.ui.displayDialogAsync("https://localhost:3000/Mycompany.html",
    {height: 50, width: 50, displayInIframe: true},
    (asyncResult) => {
        dialog = asyncResult.value;
        if (asyncResult.status === Office.AsyncResultStatus.Failed) {
            console.error('Error opening dialog: ' + asyncResult.error.message);
        } else {
            const dialog = asyncResult.value;
            dialog.addEventHandler(Office.EventType.DialogMessageReceived, receiveMessage);
            dialog.addEventHandler(Office.EventType.DialogEventReceived, dialogClosed);
        }        
  event.completed();
}

mycompany.js

Office.onReady((info) => {
  if (info.host === Office.HostType.Excel) {
    console.log("Excel add-in is ready.");
    //Office.context.ui.addHandlerAsync(Office.EventType.DialogParentMessageReceived,onMessageFromParent);
  }
});

company.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">    
    <!-- Office JavaScript API -->
    <script type="text/javascript" src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js"></script>
    <title>Company</title>
</head> 
    <body>    
        <div class="container">  
            <h2>Company Information</h2>
        <div id="message" class="message-area"></div>
        </div>
    </body>
</html>

报错信息

Uncaught TypeError TypeError: Cannot read properties of undefined (reading 'register')
at (appsforoffice.microsoft.com/lib/1.1/hosted/excel-win32-16.01.js:25:346859)
at (appsforoffice.microsoft.com/lib/1.1/hosted/excel-win32-16.01.js:25:1507516)
Promise.then ---
at (appsforoffice.microsoft.com/lib/1.1/hosted/excel-win32-16.01.js:25:1507458)
at (appsforoffice.microsoft.com/lib/1.1/hosted/excel-win32-16.01.js:25:1526108)
at t (appsforoffice.microsoft.com/lib/1.1/hosted/excel-win32-16.01.js:25:1530020)
at (appsforoffice.microsoft.com/lib/1.1/hosted/excel-win32-16.01.js:25:1530033)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:26614)
at t (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:26015)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:32590)
at c (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:4670)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:4759)
at j (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:31996)
at (appsforoffice.microsoft.com/lib/1.1/hosted/excel-win32-16.01.js:25:256293)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:33148)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:5641)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:4824)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:33041)
at (appsforoffice.microsoft.com/lib/1.1/hosted/excel-win32-16.01.js:25:115895)
at E (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:29409)
at s (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:31277)
at c (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:4670)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:4759)
at y (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:34102)
at m (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:6822)
script ---
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:6079)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:4475)
at H (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:34631)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:35376)
at (appsforoffice.microsoft.com/lib/1.1/hosted/office.js:76:36231)


已做操作

已在清单文件的<AppDomains>中添加本地域名:

<AppDomains>
  <AppDomain>https://localhost:3000</AppDomain>
</AppDomains>

解决思路

  1. 移除displayInIframe参数:该参数仅适用于OAuth等特定场景,普通对话框无需启用,移除后可避免Office.js在iframe环境下的初始化冲突。修改commands.js中的配置:
Office.context.ui.displayDialogAsync("https://localhost:3000/Mycompany.html",
  {height: 50, width: 50},
  (asyncResult) => {
      // 原有逻辑保持不变
  }
);
  1. 升级Office.js版本:当前使用的1.1版本较旧,存在对话框环境下的API兼容问题,建议升级到最新稳定版,修改company.html中的引用:
<script type="text/javascript" src="https://appsforoffice.microsoft.com/lib/1.15/hosted/office.js"></script>
  1. 简化对话框初始化逻辑:对话框无需完整初始化Excel模块,调整mycompany.js代码:
Office.onReady(() => {
  console.log("Dialog is ready.");
  // 如需接收父窗口消息,再启用DialogParentMessageReceived事件监听
});
  1. 检查清单权限配置:确保清单中Permissions设置正确,对话框模式下至少需要ReadWriteDocument或对应权限,同时确认SourceLocation与对话框页面域名一致。

内容的提问来源于stack exchange,提问作者AlukardDve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:08:13