我正在使用AngularJS处理PowerPoint-AddIn.要获取用户语言,我使用Office.context.displayLanguage,它仅在Office.initialize -Callback中可用.我通过Angular-Factory获得了我的语言字符串.当我将Office.initialize -Callback放入我的Angular Controller中时,它会破坏Controller-Functionality,并且我的页面上的按钮不再有效.我究竟做错了什么?
myApp.controller('angularHomeController', ['$scope', 'lang', function ($scope, lang) {
$scope.lang = lang.getLocaleStrings("en-US");
Office.initialize = function (reason) {
$scope.lang = lang.getLocaleStrings(Office.context.displayLanguage);
}
}]);
Run Code Online (Sandbox Code Playgroud)
我将语言默认设置为英语,但我希望在初始化文档时更改它并且我可以访问displayLanguage.我的应用程序工作正常,直到我将Office.initialize -Callback放在我的控制器内.我应该以某种方式注入Office对象吗?我没有收到任何错误消息.
我有一个Office.js任务窗格加载项,在用户在任务窗格UI上执行特定操作之前,它不会对Office API执行任何操作.UI是angular.js SPA.所以,很自然地,我无需在Office.initilize上做任何事情.但是,我一直在运行以下错误,直到我给Office.initilize一个空函数.
SCRIPT5022:https:// localhost:44300/Scripts/Office/1/office.js中第 103 行第103行未处理的异常 0x800a139e - JavaScript运行时错误:Office.js尚未完全加载.请稍后重试或确保在Office.initialize函数中添加初始化代码.office.js(11,10360)
摆脱这个的代码是:
<script type="text/javascript">
Office.initialize = function (reason) {
// Nothing to do here..
}
</script>
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?顺便说一句,错误不是立即的或响应任何API调用或用户交互.它似乎被Office.js文件中的setTimeout抛出了.
是否有用于为Office 2016 for Mac开发加载项的新API?我见过一个javascript API,但我还不清楚这是否适用于Office for Mac 2016,Office for Windows 2013+或Office Web Apps.请指出一份澄清该文件的官方文件.
有许多讨论如何保证循环中promise的执行顺序的线程。我想知道Office加载项的JavaScript API的最佳实践是什么。在大多数情况下,所承诺的是ctx.sync()。
这是一个片段,用于逐个打印Excel范围列表的地址。测试表明,它很好地遵守了Excel范围的顺序。但是问题是是否以及如何保证执行顺序?
function loadAll () {
var ranges = ["A:A", "B:B", "C:C", "D:D", "E:E"];
var sheet = "Sheet1";
for (var i = 0; i < ranges.length; i++) {
loadRange(ranges[i], sheet);
}
}
function loadRange (range, sheet) {
Excel.run(function (ctx) {
var r = ctx.workbook.worksheets.getItem(sheet).getRange(range);
r.load('address');
return ctx.sync().then(function() {
console.log(r.address);
});
});
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
我正在使用Visual Studio项目模板创建一个新的Outlook Mail加载项,我在其中获取一个显示当前所选电子邮件属性的示例.
我添加了一个带有click事件处理程序的按钮,使用以下代码打开一个对话框:
$('#clickMeButton').click(function () {
Office.context.ui.displayDialogAsync('https://localhost/OutlookAddinTest/MessageDialog.html', {
height: 40,
width: 40,
requireHTTPS: true
}, function (result) {
_dlg = result.value;
_dlg.addEventHandler(Microsoft.Office.WebExtension.EventType.DialogMessageReceived, dialogMessageReceived);
});
});
Run Code Online (Sandbox Code Playgroud)
我正在使用Chrome中的Outlook网络客户端进行调试:

我不知道它是否与此错误相关,但在我点击clickMeButton之前,我可以在加载网站后看到以下错误:

osfruntime.js:13 Error while parsing the 'sandbox' attribute: 'ms-allow-popups' is an invalid sandbox flag.OSF.OsfControl._createIframeAndActivateOsfControl @ osfruntime.js:13
Run Code Online (Sandbox Code Playgroud)
该displayDialogAsync(...)函数不应该用于Outlook Mail加载项吗?这可能是一个问题,因为它会在主Outlook html页面的上下文中加载另一个html页面.但它不能在Outlook桌面客户端中运行.
我正在为Microsoft Word开发一个Add In.我期待添加自定义上下文菜单.在Word文档中使用上下文菜单是否可行?
此问题是通过Microsoft Graph在Outlook加载项中获取自定义属性集的后续操作。
我的Outlook Office.js加载项正在向事件添加一些自定义属性。它可以按预期工作,我可以使用Microsoft Graph并按照以下GET请求访问这些属性:
/v1.0/me/events/{event-id}?$expand=SingleValueExtendedProperties($filter=id%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')
Run Code Online (Sandbox Code Playgroud)
但现在,我尝试通过将这样的正文发布到推送通知端点(/v1.0/subscriptions)来订阅推送通知:
{
changeType: "created,updated,deleted",
notificationUrl: `[...my url...]`,
resource: `/users/${userData.id}/events?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')`,
expirationDateTime: tomorrow,
clientState: "SecretClientState"
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
{
"error": {
"code": "ExtensionError",
"message": "Operation: Create; Exception: [Status Code: BadRequest; Reason: Bad Request]",
"innerError": {
"request-id": "01dcece6-0103-4bef-8231-e9ab9480402a",
"date": "2017-04-04T20:20:58"
}
}
}
Run Code Online (Sandbox Code Playgroud)
试图设置请求中的资源为不转义,但结果相同,接下来我尝试的是$filter功能,因此使用MS Graph资源管理器以以下格式获取了get请求:
/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')
Run Code Online (Sandbox Code Playgroud)
但出现以下错误:
{
"error": {
"code": "ErrorInvalidUrlQueryFilter",
"message": "The filter expression for $filter does not match to a single extended property and a value restriction.", …Run Code Online (Sandbox Code Playgroud) outlook-restapi office-js outlook-web-addins microsoft-graph
我在Office.js中使用Angular 4.该项目由Angular CLI创建.
代码很简单:
// declare const Office: any;
// With the line above, the app runs perfect
Office.initialize = function () {
platformBrowserDynamic().bootstrapModule(AppModule);
};
Run Code Online (Sandbox Code Playgroud)
我收到了错误
找不到名字'办公室'.
我已经做了 npm install --save-dev @types/office-js
我的tsconfig.json文件:
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"baseUrl": "src",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2016",
"dom"
]
}
}
Run Code Online (Sandbox Code Playgroud)
更新1:
关注@MahmoodSajjadi建议,之后npm install --save @microsoft/office-js和使用
import { Office } from '@microsoft/office-js';
Run Code Online (Sandbox Code Playgroud)
得到此错误:
/my-app/src/main.ts中的错误(3,24):文件'/my-app/node_modules/@types/office-js/index.d.ts'不是模块. …
在撰写模式下,我收到itemId邮件项目saveAsync。
一旦邮件项目发送,项目Id进来的Office.context.mailbox.item.itemId是比什么是在撰写模式给予不同的。
用于进入itemId撰写模式的代码:
var itemId = Office.context.mailbox.item.itemId;
if (itemId === null || itemId == undefined) {
Office.context.mailbox.item.saveAsync(function (result) {
itemId = result.value;
});
}
Run Code Online (Sandbox Code Playgroud)
发送电子邮件后,我使用以下方法验证itemId了“发件箱”中的电子邮件:
`Office.context.mailbox.item.itemId`
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,情况有所不同。
根据文档,itemId应该相同:
该
itemId属性在撰写模式下不可用。如果需要商品标识符,则saveAsync可以使用该方法将商品保存到商店,这将AsyncResult.value在回调函数的参数中返回商品标识符。
我做错了什么?
如何将加载项命令与Angular Outlook加载项一起使用?
我们有一个Office.js加载项,并有一个Functions.html和一个Functions.js调用命令.我们已将URL添加functions.html到我们的Manifest文件中.
Functions.html:要Functions.js为支持加载项命令的客户端加载的空HTML文件.Functions.js:单击加载项命令按钮时调用的代码.任何人都可以建议使用Angular使用加载项命令吗?
office-js ×10
angular ×2
ms-office ×2
office365 ×2
angularjs ×1
asynchronous ×1
javascript ×1
macos ×1
powerpoint ×1
promise ×1
typescript ×1
vsto ×1
word-addins ×1