问题标签 [office-js-helpers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1147 浏览

azure-active-directory - Azure 应用程序清单尝试使用 Outlook Web 加载项中的 office-js-helpers 进行身份验证时出现问题

我正在使用office-js-helpers以在我的 Outlook Web 加载项中获取 OAuth 令牌,因此我可以将它用于带有 EWS 托管 API 的 OAuthCredentials(其代码位于使用 ASP.NET 的 Azure 应用服务中网络 API)。

我已经在我的测试 Office 365 租户(例如 mytenant.onmicrosoft.com,这与托管 Web 应用程序的 Azure 订阅不同 - 如果这很重要)中配置了我的应用程序的应用程序注册,作为 oauth2AllowImplicitFlow 设置为 true 的本机应用程序。我使用 Native 应用程序类型而不是 Web/API 应用程序来绕过一个意外错误,该错误表明我的应用程序需要管理员同意 - 即使没有请求应用程序权限 - 但这是另一回事(也许我无论如何都必须使用 Native - 不是 100% 肯定) .

我确保应用注册中的重定向 URI(又名回复 URL)指向与 Outlook 加载项相同的页面(例如https://mywebapp.azurewebsites.net/MessageRead.html)。

这是我的应用清单:

{ "appId": "a11aaa11-1a5c-484a-b1d6-86c298e8f250", "appRoles": [], "availableToOtherTenants": true, "displayName": "My App", "errorUrl": null, "groupMembershipClaims": null, "optionalClaims": null, "acceptMappedClaims": null, "homepage": "https://myapp.azurewebsites.net/MessageRead.html", "identifierUris": [], "keyCredentials": [], "knownClientApplications": [], "logoutUrl": null, "oauth2AllowImplicitFlow": true, "oauth2AllowUrlPathMatching": false, "oauth2Permissions": [], "oauth2RequiredPostResponse": false, "objectId": "a11aaa11-99a1-4044-a950-937b484deb8e", "passwordCredentials": [], "publicClient": true, "supportsConvergence": null, "replyUrls": [ "https://myapp.azurewebsites.net/MessageRead.html" ], "requiredResourceAccess": [ { "resourceAppId": "00000003-0000-0000-c000-000000000000", "resourceAccess": [ { "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d", "type": "Scope" } ] }, { "resourceAppId": "00000002-0000-0000-c000-000000000000", "resourceAccess": [ { "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6", "type": "Scope" }, { "id": "a42657d6-7f20-40e3-b6f0-cee03008a62a", "type": "Scope" } ] }, { "resourceAppId": "00000002-0000-0ff1-ce00-000000000000", "resourceAccess": [ { "id": "2e83d72d-8895-4b66-9eea-abb43449ab8b", "type": "Scope" }, { "id": "ab4f2b77-0b06-4fc1-a9de-02113fc2ab7c", "type": "Scope" }, { "id": "5eb43c10-865a-4259-960a-83946678f8dd", "type": "Scope" }, { "id": "3b5f3d61-589b-4a3c-a359-5dd4b5ee5bd5", "type": "Scope" } ] } ], "samlMetadataUrl": null }

我还确保将授权 URL 添加到我的加载项清单中:

这是我在插件中使用 office-js-helpers 进行身份验证的代码:

现在加载项中的代码可以正确登录用户并请求所需的权限,但是在单击应用程序授权步骤上的接受按钮后,返回以下错误:

AADSTS50011:回复地址“ https://mywebapp.azurewebsites.net ”与为应用程序配置的回复地址不匹配:“a11aaa11-1a5c-484a-b1d6-86c298e8f250”。更多细节:未指定

现在每次单击登录按钮时都会返回错误(不再提示用户登录)。它从未检索过令牌。完整的授权 URL 是:

https://login.windows.net/mydomain.onmicrosoft.com/oauth2/authorize?response_type=token&client_id=a11aaa11-484a-b1d6-86c298e8f250&redirect_uri=https%3A%2F%2Fmywebapp.azurewebsites.net&resource=https%3A%2F% 2Fgraph.microsoft.com&state=982599964&nonce=3994725115

我究竟做错了什么?问题是否真的是因为 Web 应用程序的主机名(重定向 URI)与托管应用程序注册的 Azure AD 租户的域不匹配?如果是这样,我如何从托管没有 Office 365 或 Exchange Online 的 Web 应用程序的 Azure 订阅授予 Exchange Online 权限?我是否必须向我的测试 Office 365 租户添加 Azure 订阅,以便它也可以托管 Web 应用程序?

0 投票
1 回答
54 浏览

excel - 是否可以使用 office.js 使用 VSTO Web 插件加载 Excel 中的值列表

我正在使用 office.js 开发一个 excel 加载项,它在 excel 工作表中填充表格数据。加载项允许用户更新表列详细信息,但我想显示参考值列表而不是自由文本。下面给出了场景示例。 在此处输入图像描述

excel中显示的表格将有两列第1列和第2列,我将有参考表中显示的参考数据,当用户想要更新第2列时,我希望用户只选择允许的值,但我看不到任何可用的选项在 office.js 库中。如果你们有任何建议可以满足我的需求,请指导我。

我正在使用 office.js 对象加载表格,如下所示

0 投票
1 回答
530 浏览

es6-promise - 无法弄清楚如何使用 OfficeExtension.Promise

目前我正在尝试使用 Microsoft 提供的 OfficeExtension.Promise polyfill 来开发 Office 加载项。不幸的是,到目前为止我无法让它工作。据我所知,这些仅在 WordApi 1.2 和 ExcelApi 1.2 中提供。由于我找不到提供这些 api 的单独节点模块,我假设这些都包含在普通的“@microsoft/office-js”节点模块中。此外,我还安装了 office-js 类型。

节点模块

节点模块

导入语句

到目前为止,我已经尝试通过以下方式导入“OfficeExtension”类/命名空间。

错误

所有这些都会导致智能感知错误,指出无法找到该模块。

错误

问题

具体问题是我不知道如何导入功能以使用 OfficeExtension.Promise polyfill。我找不到任何文档可以提供有关此主题的任何帮助,因此将不胜感激任何建议或信息。

0 投票
1 回答
297 浏览

outlook - Office.context.mailbox.item.getSelectedDataAsync 未在已安装的 Outlook 中返回所选数据

根据提供的文档, Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, {}, getCallback)应该从邮箱的正文或主题返回选定的数据。而是callback返回一些 html 标记asyncResult.value.data,此问题仅在已安装的 Outlook 中。

但是,这在浏览器应用程序中运行良好,并且可以asyncResult.value.data正确返回所选数据。

有人可以向我解释为什么这个问题只发生在已安装的 Outlook 中吗?可能我可能遗漏了什么,请澄清。

返回的 html 标记而不是选定的数据:

截图供参考:

异步结果

0 投票
2 回答
210 浏览

office-js - 启动时自动执行插件功能

我已经搜索过了,作为最后的手段,我将前往这里的专家。

我想知道以下是否可行或在未来的路线图中是否可行

  1. Document.open() 的预期可用日期?2.有什么方法可以打开和编辑(在线办公)One Drive 中的文档。
  2. 我们可以在打开文档后立即执行任何插件功能而不实际启动插件吗?

谢谢艾哈迈德

0 投票
0 回答
163 浏览

javascript - Excel 16.13 中的 Office js 对话框问题

我正在使用 Office js 库中的以下函数来显示 Excel 对话框 -

在以编程方式关闭对话框并尝试再次打开它时,它显示以下错误 -

错误代码 - 12007。已从任务窗格打开一个对话框。任务窗格加载项一次只能打开一个对话框。

该问题持续存在Microsoft Excel 16.13。它适用于所有以前版本的 Excel。

0 投票
1 回答
378 浏览

oauth-2.0 - 使用 login.microsoft.com 的 OAuth 返回不一致的令牌

我正在使用office-js-helpers身份验证库。使用Microsft Azure AD 2.0 Converged auth端点,我测试了来自 AD 用户(属于 AD 租户)和在...@gmail.comMicrosoft 注册的帐户的登录。

它们都返回一个类似的有效载荷,带有一个access_token属性。主要区别在于,对于 AD 用户,这access_token是一个签名的 JWT,而对于非 AD 帐户,访问令牌是一个 base64 编码(并且可能是加密/编码)字符串。

我可以将任一令牌用于其他 Microsoft API,例如 Graph API,所以我没有指出错误。但是我希望将其access_token用作我自己的 API 的 JWT。

有什么方法可以强制融合身份验证服务为所有登录返回 JWT?

有没有人处理过这个问题并想出一个明智的解决方法?

0 投票
1 回答
320 浏览

office-js - Word 加载项无法安装在 Word 2016(MSO 16.0.4266.1001 64 位)上

这些天,我发现我的加载项无法安装在 Word 2016(MSO 16.0.4266.1001 64 位)上。菜单中没有显示图标。只需打开如下窗口:

错误

所以我去了dev.office.com发现了这个:

*注意:通过 MSI 安装的 Office 2016 的内部版本号为 16.0.4266.1001。此版本仅包含 WordApi 1.1 要求集。

这个词在我脑海中闪过,我的加载项中使用了office-js-helpers,这是这个原因吗?

她是我在 manifest.xml 中的要求:

我想知道我的加载项在 Word 2016(MSO 16.0.4266.1001 64 位)上不可用的原因。有任何想法吗?谢谢你的帮助!

0 投票
0 回答
346 浏览

javascript - 使用带有 office-js-helpers 身份验证器的 msgraph-sdk-javascript 的令牌错误

我有一个使用 React + TypeScript 的 Outlook 插件,使用 Node.js 在本地进行调试。我正在使用 office-js-helpers 库进行身份验证和 msgraph-sdk-javascript Graph 客户端库。作为 POC,我只是试图通过通过其 id 检索当前电子邮件的详细信息来验证我是否可以成功调用 Graph。我可以成功使用 office-js-helpers Authenticator 授权应用程序,并成功检索令牌。

但是,当我使用 Graph 客户端调用 时v1/me/messages/{ID},我得到:

“401 InvalidAuthenticationToken:访问令牌验证失败”

我不确定这是我使用身份验证器的方式有问题,还是我的加载项或应用程序清单有问题。我的加载项将这些用于AppDomains

我正在使用https://localhost:3000我的应用程序的重定向 URI,并启用了隐式身份验证。

如果我将 force 选项与 authenticate 方法一起使用,我也会收到此错误:

无法在“DOMWindow”上执行“postMessage”:提供的目标来源(“ https://login.microsoftonline.com ”)与收件人窗口的来源(“ https://localhost:3000 ”)不匹配。

但是,我能够检索令牌。

我究竟做错了什么?我不确定 Authenticator 的流程,何时使用authenticator.tokens.getauthenticator.authenticate. 对于第一次运行,我假设始终进行身份验证并且不需要使用tokens.get,而对于第二次运行,我假设只使用tokens.get,但是如果我尝试其中任何一个或始终尝试两者,它似乎不会改变无效令牌的结果。

0 投票
0 回答
39 浏览

powerpoint - 用于“离网”客户的插件

我为我们公司开发了一个插件,它基本上将我们应用程序的一部分加载到 iframe 中。这很好,但是我们有一个政府客户,他的用户基本上没有上网,即没有外部互联网访问,加载项的 web 应用程序部分托管在建筑物内的内部 web 服务器上,但我无法加载在他们的PowerPoint应用程序中加载?这是因为没有互联网访问吗?

我知道清单具有指向架构的必需链接,例如: xmlns="http://schemas.microsoft.com/office/appforoffice/1.1"

这会是问题的原因吗?如果是这样,是否有解决方法?即在本地托管模式

TIA